C# 为什么结构的低层长度要长到4字节?

C# 为什么结构的低层长度要长到4字节?,c#,interop,C#,Interop,有一个结构: [StructLayout(LayoutKind.Sequential)] public struct WAVEFORMATEX { public ushort wFormatTag; public ushort nChannels; public ushort nSamplesPerSec; public uint nAvgBytesPe

有一个结构:

        [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?

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

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

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

谢谢你,伙计,请看我的另一个问题