gpt4 book ai didi

c# - .NET 中包含单个整数属性的简单类的大小

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:43 25 4
gpt4 key购买 nike

我已经看过 Mario Hewardt 的一个 session ,其中提到一个包含整数属性的类占用 16 个字节的空间。我想知道一个简单的跟随类的大小如何导致 16?

[StructLayout(LayoutKind.Sequential)]
public class MyClass
{
public int Age;
}

问题是整数占用 4 个字节的空间(对吗?)那么这 12 个其他字节到底从哪里来的呢?我还使用 Marshal.SizeOf 来获取类大小,结果为 4:

int n = Marshal.SizeOf(typeof(MyClass));
//n == 4

我读过 this上面的类似乎包含 8 个字节的内部数据(这些数据到底是什么?)、4 个字节的 int 值和 4 个字节的未使用空间。那么如果需要 16 个字节,为什么 Marshal.SizeOf 返回 4?如果需要 4 个,那 8 个字节到哪里去了?我真的很困惑。

最佳答案

Marshal.SizeOf(Type)返回等效的 unmanaged 类型的大小,即如果等效的非托管类型(例如 C++ 类)具有相同的字段布局和包装,它将占用多少字节。请注意,此函数仅适用于具有 [StructLayout] 的类。 LayoutKind 为 ExplicitSequential 的属性。

CLR 在托管堆上分配对象时用完的内存取决于所讨论的 CLR 的内部结构。 Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects是一篇关于对象分配的 CLRv2 实现的文章。本质上,每个对象都有两个隐藏字段——一个同步块(synchronized block)索引和一个类型句柄。同步块(synchronized block)是在对象与 lock(obj) {} 语句一起使用时使用的内部结构。类型句柄提供有关给定实例的运行时类型信息 - 它包含对象的方法表等。

关于c# - .NET 中包含单个整数属性的简单类的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11426426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com