Marshal.SizeOf显示错误输出的结构

Say*_*Sen 2 c# struct types sizeof

这是我的代码:

struct abc
{
    short a;
    byte b;
    int c;
}
Run Code Online (Sandbox Code Playgroud)

我用的时候:

Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(typeof(abc)));
Run Code Online (Sandbox Code Playgroud)

它显示:8虽然它应该显示:7因为在我的机器中:byte:1,short:2,int:4bytes分别.

为什么会这样?

如果由于填充而发生,如何在读取结构大小时禁用填充?因为我需要以字节为单位的结构的确切大小.这一点很重要.

Kob*_*uek 6

8由于结构成员对齐规则,它显示出来.

如果你想设置你struct的不对齐,你需要使用StructLayoutPack = 1像这样的属性:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct abc
{
    short a;
    byte b;
    int c;
}
Run Code Online (Sandbox Code Playgroud)

这应该输出7.