gpt4 book ai didi

.NET 幕后 : What does 'object' store?

转载 作者:行者123 更新时间:2023-12-04 06:26:52 27 4
gpt4 key购买 nike

一个朴素的类型系统会将对象存储为指向其类型的指针(其中包含许多有用的信息,如 vtable、对象大小等),然后是其数据。如果.Net 有这样的类型系统,object在 32 位系统上占用 4 个字节,在 64 位系统上占用 8 个字节。

We can see that it doesn't .对象开销是两个指针大小,此外,还有一个指针大小的“最小”大小。

那么object 是什么意思?实际上存储在其中,在幕后?

最佳答案

是的,这就是它的样子。 “类型句柄”,也就是“方法表指针”位于偏移量 0 处,对象数据位于偏移量 4 处。在偏移量 4 处有一个名为“syncblock”的额外字段。它存在是因为它在对象空间不使用时也参与了垃圾收集堆,这是一个需要两个指针的空闲 block 的双链表。不要让这浪费,同步块(synchronized block)有几个用途,比如存储锁定状态,存储哈希码,当需要存储太多时存储指向显式同步块(synchronized block)的指针。

最小的可能对象是一个装箱字节,4 + 4 + 1 = 9 个字节。但是 GC 堆的分配粒度是 4 字节,因此您将获得下一个 4、12 字节的倍数。

这在 Visual Studio 中的调试器中非常明显。您会在 this answer 中找到提示。 .

关于.NET 幕后 : What does 'object' store?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561008/

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