why the size of struct in C is not equal the sum of all variables size; -
possible duplicate:
why isn't sizeof struct equal sum of sizeof of each member?
this struct , size of 40 size of variables 34. how can eliminate space of struct?
typedef struct { ushort sequencenumber; ushort linkcount; ushort attributeoffset; ushort flags; ulong bytesinuse; ulong bytesallocated; ulonglong basefilerecord; ushort nextattributenumber; ushort padding; ulong mftrecordnumber; ushort updateseqnum; } file_record_header, *pfile_record_header;
that's because compiler free insert padding honour alignment requirement. have couple of options.
the first inherently non-portable many implementations provide like:
#pragma pack
which attempt pack structures tight possible. aware may slow down code, depending on architecture
the other put most-aligned elements front such as:
typedef struct { ulonglong basefilerecord; // 0x00 ulong bytesinuse; // 0x08 ulong bytesallocated; // 0x0c ulong mftrecordnumber; // 0x10 ushort nextattributenumber; // 0x14 ushort sequencenumber; // 0x16 ushort linkcount; // 0x18 ushort attributeoffset; // 0x1a ushort flags; // 0x1c ushort padding; // 0x1e ushort updateseqnum; // 0x20 } file_record_header, *pfile_record_header;
with offsets in comments, asuming ulonglong
8 bytes, ulong
4 , ushort
2. won't remove padding make easier compiler minimise it.
Comments
Post a Comment