struct C#的大小

Evy*_*tar 4 c# struct

我是C#的新手.
我试图理解为什么结构大小增长.
即:

struct Test
{
    float x;
    int y;
    char z;
}
Run Code Online (Sandbox Code Playgroud)

Test结构的大小实际上是10个字节(float = 4,int = 4,char = 2).
但是,当我试图用Marshal.SizeOf(..)方法获得sizeof结构时,我得到了12.
在C++中我做pragma pack(1)了防止这个但是我怎么能在C#中做到这一点?

另一个问题:
当我试图将Test结构转换为字节数组时,如果结构不是[Serialize]我得到的字节数组大小为12字节为例外(或不是),但如果结构是[Serialize]我得到大小为170字节的字节数组,为什么会这样?
谢谢!:)

xan*_*tos 10

这个

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct TestStruct
{
    float x;
    int y;
    char z;
}
Run Code Online (Sandbox Code Playgroud)

会给出一个Marshal.SizeOf() == 9,因为Marshal.SizeOf(typeof(char)) == 1出于奇怪的历史原因.

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
Run Code Online (Sandbox Code Playgroud)

你会得到这个 Marshal.SizeOf() == 10