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

时间:2014-10-10 03:58:37

标签: c# .net reference

我正在阅读有关参考类型内部的Pro .Net Performance书籍部分。它提到对于32位.net进程,引用类型具有4个字节的对象头和4个字节的方法表指针。另外,在32位系统上说,对象与最接近的4字节倍数对齐,这使得引用类型的最小大小为12个字节。

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

2 个答案:

答案 0 :(得分:3)

最少12个字节是垃圾收集实现的要求。

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

  

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

TypeHandle是方法表的句柄。)

答案 1 :(得分:1)

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