为什么结构的低级长度要长到 4 个字节?

Why do the low level length of structure longer to 4 bytes?

有结构:

        [StructLayout(LayoutKind.Sequential)]
        public struct WAVEFORMATEX
        {
            public ushort wFormatTag;
            public ushort nChannels;
            public ushort nSamplesPerSec;
            public uint nAvgBytesPerSec;
            public ushort nBlockAlign;
            public ushort wBitsPerSample;
            public ushort cbSize;
        };
        public WAVEFORMATEX audioInfo = new WAVEFORMATEX();

为什么 Marshal.SizeOf(audioInfo) returns 20 而不是 16?

uint喜欢在 4 字节边界上对齐,因此在 nSamplesPerSecnAvgBytesPerSec 之间插入了 2 字节的填充。我假设另外两个字节在结构的末尾进行填充,以使其总大小也是四个字节的倍数。

要防止引入此填充,请将 StructLayout 属性的 Pack 字段设置为 1 或 2,例如:

[StructLayout(LayoutKind.Sequential, Pack=2)]
// ...