C#Marshal.SizeOf

use*_*928 3 c# size marshalling

我正在使用Marshal.SizeOf来了解我的结构大小:

struct loginStruct
{
    public string userName;
    public string password;

    public loginStruct(string userName, string password)
    {
        this.userName = userName;
        this.password = password;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是此功能的用法:

int len = Marshal.SizeOf(typeof(loginStruct));
Run Code Online (Sandbox Code Playgroud)

我有两个程序.在一个程序中,len等于8.在另一个程序中,它等于16.它是相同的结构.为什么我有这种差异?

Joe*_*oey 8

我猜一个程序是针对AnyCPU(在64位平台上将是64位)和一个32位编译的.


Jon*_*nna 5

方法不会影响给定的大小,所以我们在谈论有效:

struct loginStruct
{
    public string userName;
    public string password;
}
Run Code Online (Sandbox Code Playgroud)

struct有两个引用类型字段。因此,它在内存中有两个字段,它们指向堆上的对象,或者指向null

所有引用类型字段在 32 位 .NET 中为 4 个字节,在 64 位 .NET 中为 8 个字节。

因此,大小在 32 位 .NET 中为 4 + 4 = 8,在 64 位 .NET 中为 8 + 8 = 16。