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

时间:2015-08-28 03:21:22

标签: c# interop

有结构:

        [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)会返回20而不是16?

1 个答案:

答案 0 :(得分:2)

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

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

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