|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.04.2012, 01:00 | #1 |
Пользователь
Регистрация: 26.02.2012
Сообщений: 20
|
Объект String в памяти
Добрый день.
Я немного не понимаю как объект типа string передается в функцию, интересует как это делается в памяти Код:
string dddww; Он вызывает функцию void (bool) c именем шаблона класса string Далее он записывает нашу строку начиная с определенного адреса. При вызове функции в качестве аргумента передается шаблон такой же как и при создании объекта. Если смотреть на адрес где лежит функция, через 4 байта лежит адрес, как я понял начала объекта , где располагается размер строки в памяти т.к. строка меньше 16 символов располагается, ниже на 4 байта , а более располагается по ссылки Последний раз редактировалось 9esa; 24.04.2012 в 13:47. |
24.04.2012, 01:26 | #2 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
О чем Вы?
wtte это функция у Вас? И она имеет сигнатуру void (bool) ? Тогда приведенный код вообще не скомпилируется. |
24.04.2012, 01:51 | #3 |
Пользователь
Регистрация: 26.02.2012
Сообщений: 20
|
wtte это просто функция которая принимает в качестве аргумента string строку .
а когда ты пишешь строку string a; вызывается функция void(bool) |
24.04.2012, 01:59 | #4 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Когда я пишу string a; вызывается конструктор класса. |
|
24.04.2012, 03:10 | #5 |
Пользователь
Регистрация: 26.02.2012
Сообщений: 20
|
Хм.... Почитай внимательно тогда , что происходит.
std::basic_string<char,std::char_tr aits<char>,std::allocator<char> > void (bool); Тебе эта строчка не знакома? Далее когда ты вызываешь функцию передавая строку в качестве аргумента происходит вот такая вещь NameFunction(std::basic_string<char ,std::char_traits<char>,std::alloca tor<char> >); |
24.04.2012, 03:45 | #6 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Если речь идет о стандартном классе <string>, то при объявлении идет вызов конструктора класса string, который является псевдонимом для шаблонного класса basic_string. Он в свою очередь является наследником class basic_string : public _String_val <...> class String_val: public _String_base Соответственно идут вызовы конструкторов этих классов. Вопрос- то в чем? Где именно хранится строка? Здесь: Код:
Последний раз редактировалось EUGY; 24.04.2012 в 04:07. |
|
24.04.2012, 13:53 | #7 |
Пользователь
Регистрация: 26.02.2012
Сообщений: 20
|
Интересует, как это реализовано в памяти. Точнее хотелось бы узнать, как можно находить нашу строку в памяти зная только вершину стека нашей функции.
|
24.04.2012, 19:54 | #8 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Для простоты положим, что юникод отключен и используются анси -строки. Имеем адрес объекта F, класса string. Прибавляя к адресу четыре байта, получаем адрес защищенного члена _Bx В зависимости от длины, строка хранится либо в поле _Buf, либо в поле _Ptr. То есть по смещению в четыре байта от адреса переменной хранится либо указатель строки, либо указатель-на-указатель. Код:
Последний раз редактировалось EUGY; 24.04.2012 в 19:57. |
|
25.04.2012, 00:34 | #9 |
Пользователь
Регистрация: 26.02.2012
Сообщений: 20
|
К сожалению причем, я работаю над программой которая подключается в виде динамической библиотеке к отдельному проекту , и позволяет при каждом вызове функции копировать все значения передаваемые в неё. При каждом вызове я могу получить информацию о передаваемых значениях и возвращаемых.Со структурами и классами все просто как и с обычными типами. А вот со стрингом не так все просто, из-за того , что я имею только функцию , и указатель на начало объекта типа стринг в памяти. Если знать размерность строки то проблем не возникает, только вот размерность не узнать.
|
25.04.2012, 00:47 | #10 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Если имеешь указатель на начало объекта, то имеешь и сам объект.
Не понимаю, в чем проблема. Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Класс string, выделение памяти | Стремящийся | Общие вопросы C/C++ | 1 | 17.03.2012 14:21 |
выделение памяти под объект | VIK_aka_TOR | Общие вопросы Delphi | 4 | 15.02.2012 19:20 |
Загрузить текст из file.txt в объект String | apromix | JavaScript, Ajax | 3 | 10.10.2011 09:06 |
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? | Farrel | Общие вопросы C/C++ | 2 | 13.11.2010 17:37 |
Как получить адрес String строки или преобразовать String | madboy4ik | Общие вопросы по Java, Java SE, Kotlin | 6 | 15.01.2010 11:57 |