Просмотр полной версии : Как в С++ хранятся в памяти значения структуры?
Имеем некоторую структуру:
Struct MyStruct
{
wchar_t var1[10];
int var2;
}
Вопрос как будет размещаться в памяти строка относительно струткуры?
В ячейке памяти где располагается var1 будет указатель на область памяти где расположиться строка или строка будет располагаться непосредственно начиная с адреса переменной var1?
Где будет располагаться значение числовой переменной var2?
supernewbie2
18.08.2011, 03:07
ну в дельфе смещение узнается таг
TMyClass=class
s:string;
end;
WriteLn(dword(@TMyClass(nil).s));
Yegor, var1 тут я бы строкой не назвал, это просто статический массив символов, так что в структуре будет 20 байт var1 и 4 байта var2 подряд
Добавлено через 42 секунды
supernewbie2, причем тут смещения, тем более на дельфи?
В принципе хранятся так же как и записи в делфи. Вся статика в той же области памяти где и структура. Если есть динамические строки\массивы то в структуре на нее размещается указатель.
Yegor, эт ты сам себе отвечаешь?)
xkor, ну эт я типа разобрался с Вашей помощью и констатирую факты :)
ну в дельфе смещение узнается таг
TMyClass=class
s:string;
end;
WriteLn(dword(@TMyClass(nil).s));
познавательный код для ознакомления с исключениями виндос
alexteam
18.08.2011, 19:40
mira, какими ?
mira, какими ?
access violation имхо
alexteam, он видимо счёл что в том коде будет обращение к полю объекта, а не просто возврат адреса без каких либо действий над несуществующим объектом)
хотя не, обращения к s ж не произойдет
Добавлено через 4 минуты
даже если будет работать использование сего приема для меня "говнокодерство" без обид =)
а если по теме - да Struct это тотже record(делфи) ну при переносе кода на делф проблем не возникало с несоответствиями полей
alexteam
18.08.2011, 19:54
даже если будет работать использование сего приема для меня "говнокодерство" без обид =)
пакс юзаешь ?
supernewbie
18.08.2011, 19:55
видимо не юзает)
Struct это тотже record(делфи)я бы сказал что аналогом struct в дельфи является не просто record, а packed record, ибо обычный поля выравнивает (так чтоб смещение поля было кратно 4м байтам если не ошибаюсь по умолчанию)
я бы сказал что аналогом struct в дельфи является не просто record, а packed record, ибо обычный поля выравнивает (так чтоб смещение поля было кратно 4м байтам если не ошибаюсь по умолчанию)
разумеетса кэп. у меня в проекте всеравно все packed record. за выравниванием сам смарю.
пакс юзаешь ?
сначало мне нужно его завернуть в ДЛЛ. пока на фсе все.
тока нужны ли трюки эти в скриптах типа этого:
я бы сказал что аналогом struct в дельфи является не просто record, а packed record, ибо обычный поля выравнивает (так чтоб смещение поля было кратно 4м байтам если не ошибаюсь по умолчанию)
Да вроде уже нет я везд в делфи объявляю как просто record и ошибок нет хотя в структуры пишутся пакеты которые кое где читаю по смещениям в памяти.
Где то я читал что в делфи все record по умолчанию идут packet, и что эта директива осталась со времен турбопаскаля для совместимости.
supernewbie
19.08.2011, 10:08
в делфи все record по умолчанию идут packet
в д7 точно нет такого
destructor
23.08.2011, 03:55
Вопрос как будет размещаться в памяти строка относительно струткуры?
полностью зависит от компилятора и самый труЪ метод, это посмотреть идой\олькой память такой программы:
Struct MyStruct
{
wchar_t var1[10];
int var2;
} ms;
int main()
{
ms.var1[0]=0;
ms.var1[1]=1;
ms.var1[2]=2;
ms.var1[3]=3;
ms.var1[4]=4;
ms.var1[5]=5;
ms.var1[6]=6;
ms.var1[7]=7;
ms.var1[8]=8;
ms.var1[9]=9;
ms.var2=0x666;
__asm int 3;
return 0;
};
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot