可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
这是我的结构,它的大小是40,但是所有变量的大小都是34。如何消除这个结构的额外空间?
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;发布于 2010-11-16 06:27:45
这是因为编译器可以自由地插入填充以满足对齐要求。你有几个选择。
第一种方法本质上是不可移植的,但许多实现提供了如下内容:
#pragma pack它将试图把结构尽可能的紧凑。请注意,这可能会减慢您的代码速度,这取决于体系结构。
另一种方法是将所有排列最一致的元素放在最前面,例如:
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;如果注释中有可能出现偏移,那么ULONGLONG是8字节,ULONG是4,USHORT是2。这并不一定会删除所有填充,但它将使编译器更容易将其最小化。
https://stackoverflow.com/questions/4191679
复制相似问题