#1
|
|||
|
|||
sizeof() returns "wrong" Size of structure
Why is this structure 20 Bytes in size?
Code:
typedef struct STGAHeader{ BYTE m_uIDSize; BYTE m_uColorMapType; BYTE m_uImageType; short m_sColorMapStart; short m_sColorMapLength; BYTE m_uColorMapBits; short m_sXStart; short m_sYStart; short m_sWidth; short m_sHeight; BYTE m_uBits; BYTE m_uDescriptor; } 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 Its absolutely impossible that 6*integer1+6*integer2 is equal 20 (Intel 8.0 win) thx, Cobi Last edited by Cobi; 08-19-2005 at 06:39. |
#2
|
|||
|
|||
Try with
#paragma pack(1) (or Intel 8.0 equivalent) directive to have alignment set to 1. Tom |
#3
|
|||
|
|||
Seems to work, thx.
Guess i need to learn my tools |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
Quote:
#pragma pack(push, 1) struct ... {}; #pragma pack(pop) to avoid pack problems with other structures |
#6
|
|||
|
|||
could be a good reading
http://blogs.msdn.com/larryosterman/archive/2005/04/07/406252.aspx there is a part 2 too |
#7
|
|||
|
|||
Quote:
#include <PshPack1.h> struct ... {}; #include <PopPack.h> |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
When use "vendor defined encryption routines", how to set daemon related part? | bridgeic | General Discussion | 6 | 01-22-2015 11:35 |
Wlscgen: Are "Vendor Id" and "Developer Id" different ? | Numega Softice | General Discussion | 6 | 02-12-2007 18:12 |