gpt4 book ai didi

c# - .NET 中的内存分配

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

我有一个空对象,我创建了 MyCustomType 类型的实例并编译了我的应用程序(x64 平台)。然后我想知道我的类型有多少字节。我打开 .NET 内存分析器并根据它,我的类型权重是 - 24 字节。所以我知道在 x64 平台中,.NET 中的任何引用类型都有开销——16 个字节。毫无疑问 16 != 24。我的问题是:其他 8 个字节在哪里?

谢谢!

internal class MyCustomType
{

}

最佳答案

1 - 在 x86 中每个对象有 8 个字节的“基本”开销,在 x64 中每个对象有 16 个字节……假设我们可以在 x86 中存储“真实”数据的 Int32 并且仍然有一个对象大小为 12,同样我们可以在 x64 中存储两个 Int32 的真实数据,并且仍然有一个 x64 的对象。

2 - 分别有 12 字节和 24 字节的“最小”大小。换句话说,你不能有一个只是开销的类型。请注意“Empty”类如何占用与创建 Object 实例相同的大小……实际上有一些空闲空间,因为 CLR 不喜欢对没有数据的对象进行操作。 (请注意,没有字段的结构也会占用空间,即使对于局部变量也是如此。)

3 - x86 对象被填充到 4 字节边界;在 x64 上是 8 个字节(和以前一样)

4 - 默认情况下,CLR 乐于非常密集地打包字段——Mixed2 只占用与 ThreeInt32 一样多的空间。我的猜测是它重新组织了内存中的表示,以便所有字节都在 ints 之后......这也是快速使用不安全指针所暗示的......但我对这种事情说得不够舒服一定。坦率地说,我不在乎……只要一切正常,我们感兴趣的是整体尺寸,而不是精确的布局。

http://codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings/

关于c# - .NET 中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26945232/

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