我正在阅读Pro .Net Performance书籍中关于引用类型内部的章节。它提到对于一个32位的.net进程,引用类型有4个字节的对象头和4个字节的方法表指针。此外,它还说在32位系统上,对象被对齐到最近的4字节倍数,这使得引用类型的最小大小为12个字节。
我的问题是,为什么最小大小是12个字节?对象已经是8个字节,并且已经与4字节边界对齐了。
我的问题是,为什么最小大小是12个字节?对象已经是8个字节,并且已经与4字节边界对齐了。
垃圾回收实现要求至少12个字节。
从这里开始:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx#S9
基本实例大小是由类加载器计算的对象大小,基于代码中的字段声明。如前所述,当前的GC实现需要至少12个字节的对象实例。如果一个类没有定义任何实例字段,它将带有4个字节的开销。其余的8个字节将被对象头(可能包含syncblk号码)和TypeHandle占用。
(TypeHandle
是指向方法表的句柄)。
因此,您需要8字节的开销(对象头和方法表指针)。如果您希望对象中有任何数据,则需要至少一个字节,并且由于内存以4字节块分配给对象,因此您最终会得到至少12个字节。