sizeof ???
есть структура:
struct AA
{
unsigned int A0;
unsigned int A1;
unsigned int A2;
unsigned int A3;
unsigned int A4;
unsigned int A5;
BYTE num_jp_win;
};
итого 6(unsigned int) + 1 BYTE;
size0 = 6*sizeof(unsigned int) + sizeof(BYTE);
///size0 = 25;!!!!
size1 = sizeof(AA);
//size1 = 28;!!!
видимо sizeof выравнивет по четырем байтам. Но первый вариант неудобен. В чем прикол?? Пишу на Visual Studio 2003
Цитата:
Originally posted by takedo
Вот какая проблема:
видимо sizeof выравнивет по четырем байтам. Но первый вариант неудобен. В чем прикол?? Пишу на Visual Studio 2003
Вот какая проблема:
видимо sizeof выравнивет по четырем байтам. Но первый вариант неудобен. В чем прикол?? Пишу на Visual Studio 2003
Не sizeof выравнивает, а компилятор, и не по 4 байтам, а по разрядности выбранной системы, т.е. для Win64 данные будут выравнены по 8 байтам (по умолчанию). Правильный размер структуры выдает sizeof(AA). Для изменения параметра выравнивания см. Struct member alignment в настройках проекта (директива компилятора /Zp), хотя лучше не менять.
struct AA
{
unsigned int A0;
unsigned int A1;
unsigned int A2;
unsigned int A3;
unsigned int A4;
unsigned int A5;
BYTE num_jp1_win; // здесь компилятор без pragma выравнивал на 4
};
#pragma pack( pop ) // восстанавливаешь выравнивание как было
int size0 = 6*sizeof(unsigned int) + sizeof(BYTE);
///size0 = 25;!!!!
int size1 = sizeof(AA); // получаешь снова 25
щас проверю, но думаю,что будет все ok!!!