Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Memory


Автор: Berkut 7.12.2004, 23:21
Правильна ли такая запись?

PVOID M=VirtualAlloc(.....);

struct My{int A; double B;};

My *Mas=(My*)M;
Mas[0].A=1;
Mas[0].B=1.5;

Автор: bel_nikita 7.12.2004, 23:36
Не совсем правильно smile Учти, что выравнивание по 8 байтной границе по умолчанию идет.
т.е. если сделаешь sizeof(My), то получишь 16.

Автор: Berkut 7.12.2004, 23:41
А что надо исправить чтобы правильно было?

Автор: bel_nikita 7.12.2004, 23:47
Код

PVOID M=VirtualAlloc(.....);

#pragma pack(push,4) // установим выравнивание по границе 4х байт
struct My{int A; double B;};
#pragma pack(pop) // возвращаем исходную настройку

My *Mas=(My*)M;
Mas[0].A=1;
Mas[0].B=1.5;

Автор: Berkut 7.12.2004, 23:51
bel_nikita, спасибо!

Автор: Fantasist 8.12.2004, 22:24
bel_nikita

Ну, типа, необязательно структуру паковать, можно просто выделить sizof(My) байт.

Автор: bel_nikita 8.12.2004, 22:58
Fantasist
Цитата
Ну, типа, необязательно структуру паковать, можно просто выделить sizof(My) байт
Ну, типа не совсем понял smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)