Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > struct str{ char a; ULONG b;};


Автор: MoZy 3.9.2006, 19:41
Привет!

Кто-нибудь объяснит такую прелесть?

ЗЫ у меня лонг == 4 байта, но не в этом суть.

Автор: Void 3.9.2006, 19:47
Ключевое слово: alignment (выравнивание).

Вкратце, с целью обеспечить эффективность, компилятор выравнивает типы по 4- или 8-байтным границам (на некоторых платформах это даже необходимость).

Автор: MoZy 3.9.2006, 20:48
Void,  это типа union'а? так это же не больно экономно в плане траффика... хотя ладно, пусть все будет 4 байта  smile 
Спасибо.

Автор: Void 3.9.2006, 21:12
Цитата(MoZy @  3.9.2006,  22:48 Найти цитируемый пост)
это типа union'а? 

Нет. Вот http://en.wikipedia.org/wiki/Data_structure_alignment, к примеру, написано.
Цитата(MoZy @  3.9.2006,  22:48 Найти цитируемый пост)
так это же не больно экономно в плане траффика

Если ты собрался эту структуру передавать по сети, или есть фиксированный бинарный формат, которому надо следовать, то практически в любом компиляторе есть опции или директивы #pragma, позовляющие отключить выравнивание.

Автор: Rickert 4.9.2006, 18:06
#pragma pack()
См. MSDN.

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