为什么引用类型的最小大小是32位.NET进程的12字节

本文关键字:32位 NET 进程 12字节 引用类型 小大 为什么 | 更新日期: 2023-09-27 18:26:10

我正在阅读Pro.Net性能书中关于引用类型内部结构的部分。它提到,对于一个32位的.net进程,一个引用类型有4个字节的对象头和4字节的方法表指针。此外,在32位系统上,对象被对齐到最接近的4字节倍数,这使得引用类型的最小大小为12字节。

我的问题是,为什么最小大小是12字节?该对象是8个字节,并且已经与4个字节的边界对齐。

为什么引用类型的最小大小是32位.NET进程的12字节

垃圾收集实现需要最少12个字节。

从这里:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx#S9

基本实例大小是类加载器根据代码中的字段声明计算的对象大小。如前所述,当前GC实现需要一个至少12字节的对象实例。如果一个类没有定义任何实例字段,那么它将携带4个字节的开销。剩下的8个字节将被Object Header(可能包含syncblk编号)和TypeHandle占用。

TypeHandle是方法表的句柄)。

因此您有8个字节的开销(对象头和方法表指针)。如果你想要对象中的任何数据,那么你至少还需要一个字节,因为内存是以4字节的块分配给对象的,所以你最终至少需要12个字节。