![]() |
sizeof() returns "wrong" Size of structure
Why is this structure 20 Bytes in size?
Code:
typedef struct STGAHeader{For me 1+1+1+2+2+1+2+2+2+2+1+1 is 18 and not 20 but the compiler thinks different :confused: Its absolutely impossible that 6*integer1+6*integer2 is equal 20 (Intel 8.0 win) thx, Cobi |
Try with
#paragma pack(1) (or Intel 8.0 equivalent) directive to have alignment set to 1. Tom |
Seems to work, thx.
Guess i need to learn my tools :o |
Just to make sure you know the *reason*:
After "m_uImageType" and before "m_sColorMapStart", the compiler inserted a padding "0", so that the 2-byte-wide "m_sColorMapStart" will be stored at an address which is a multiple of 2. If you had a DWORD, the compiler would pad with zeroes until the address would be a multiple of 4, and so on. The pragma directive will tell the compiler not to bother aligning the structures. If you follow the address of each structure member and add the length of the padding zeroes where they are "needed", you'll see that the total length is 20. |
Quote:
#pragma pack(push, 1) struct ... {}; #pragma pack(pop) to avoid pack problems with other structures :) |
could be a good reading
http://blogs.msdn.com/larryosterman/archive/2005/04/07/406252.aspx there is a part 2 too |
Quote:
#include <PshPack1.h> struct ... {}; #include <PopPack.h> |
| All times are GMT +8. The time now is 08:08. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
Always Your Best Friend: Aaron, JMI, ahmadmansoor, ZeNiX