Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 16:35   #1
ohmic
 
Регистрация: 16.11.2012
Сообщений: 4
По умолчанию выравнивание структур c++ (codegear)

Никак не получается использовать структуру без выравнивания.
пробовал:
Код HTML:
#pragma pack(1)
пробовал:
Код HTML:
#pragma pack(push, 1)
пробовал:
Код HTML:
Options - Advanced Compiller - Data alignment = byte
- все дало результат нулевой, уменьшить до действительного размера (до размера полей 36 байт) не удалось. Но удавалось увеличивать размер структуры.

Вопрос КАК упаковать структуру, чтобы вообще не вставлялись байты выравнивания?

Система:
Код HTML:
64 битная  Windows 7 Pro

Embarcadero® C++Builder® XE2
Здесь все о выравнивании в "Builder" Pragma_pack
Единственное не понял, что делать с
#pragma option -an
, а так, вроде, все испробовал.

Код HTML:
// #pragma pack(1)
#pragma pack(push,1)
struct s_frameDevice 										
{
...
};
// #pragma pack(pop)
#pragma pack(pop)

typedef union u_dataDevice
{
    struct s_frameDevice s;
	U8 ch[BUF_FRAME_RX];
}T_DATA_DEVICE;

Последний раз редактировалось ohmic; 16.11.2012 в 17:38.
ohmic вне форума Ответить с цитированием
Старый 16.11.2012, 17:25   #2
ohmic
 
Регистрация: 16.11.2012
Сообщений: 4
По умолчанию

Не может же быть такого, ведь везде написано, что можно без байтов выравнивания упаковать, а тут ну нифига не получается. Значит что-то упускаю, что?

Размер получившейся структуры узнаю по конструкции
Код HTML:
sizeof(T_DATA_DEVICE);

Последний раз редактировалось ohmic; 16.11.2012 в 17:37.
ohmic вне форума Ответить с цитированием
Старый 17.11.2012, 11:47   #3
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

А размер, что ты получаешь вызовом sizeof(T_DATA_DEVICE) случайно не равен sizeof(U8)*BUF_FRAME_RX ?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 17.11.2012, 22:33   #4
ohmic
 
Регистрация: 16.11.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Sam Gold Посмотреть сообщение
А размер, что ты получаешь вызовом sizeof(T_DATA_DEVICE) случайно не равен sizeof(U8)*BUF_FRAME_RX ?
BUF_FRAME_RX == 36 (байт)
Нет, он не равен 36 (без байт выравнивания), он равен 44, иногда был 48
ohmic вне форума Ответить с цитированием
Старый 20.11.2012, 15:00   #5
ohmic
 
Регистрация: 16.11.2012
Сообщений: 4
По умолчанию

Я балбес, в при объявлении полей структуры использовал "int"
ohmic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeGear 2009 - ошибка компиляции Dark_Spirit БД в Delphi 4 16.02.2010 17:40
CodeGear Delphi 2010 andreibtzt Софт 1 25.08.2009 18:06
Чудит CodeGear 2009 Altera Софт 10 15.05.2009 08:09
CodeGear в школах России GN_ Свободное общение 2 02.02.2008 09:34
CodeGear Rad Studio AVALS Софт 0 17.12.2007 19:43