Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

sizeof ???

10K
14 декабря 2005 года
takedo
13 / / 28.06.2005
Вот какая проблема:
есть структура:
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
1.8K
14 декабря 2005 года
_const_
229 / / 26.11.2003
Цитата:
Originally posted by takedo
Вот какая проблема:
видимо sizeof выравнивет по четырем байтам. Но первый вариант неудобен. В чем прикол?? Пишу на Visual Studio 2003



Не sizeof выравнивает, а компилятор, и не по 4 байтам, а по разрядности выбранной системы, т.е. для Win64 данные будут выравнены по 8 байтам (по умолчанию). Правильный размер структуры выдает sizeof(AA). Для изменения параметра выравнивания см. Struct member alignment в настройках проекта (директива компилятора /Zp), хотя лучше не менять.

2.4K
14 декабря 2005 года
dinasok51
219 / / 12.11.2005
#pragma pack( push, 1 ) //Устанавливаешшь для твоей структуры выравнивание на 1
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
10K
14 декабря 2005 года
takedo
13 / / 28.06.2005
БОЛЬШУЩЕЕ СПАСИБО!!!
щас проверю, но думаю,что будет все ok!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог