.NET中的对象引用有多大?


Answers:


84

引用本身基本上是一个指针。在32位OS上为32位,在64位OS上为64位。

被引用的对象的大小更加复杂。


1
我想知道为什么64位.net会使用指针而不是按比例缩放到“对象”表的偏移量?对于大多数应用程序而言,一个32位的缩放偏移量就足够了(需要四个以上BILLION对象的应用程序可以使用特殊的“ superHumungous”内存模型),我认为使用缩放位移寻址的少量额外开销会更大。而不是由使对象引用变大一半而导致的改进的缓存并发性所弥补。
supercat

5
@ supercat,.NET开发人员可以选择将其应用程序编译为32位模式,并且所有指针均为32位。对于大多数不需要64位指针的应用程序来说,这可能是最好的。
塞缪尔·内夫

1
@SamuelNeff:根据我读过的其他文章,由于64位指令集允许使用更多的寄存器并且通常更高效,因此64位应用程序提供了更好的性能。我认为使用32位对象引用将进一步提高性能。
supercat

1
@supercat,关于32位和64位性能有许多相互矛盾的文章。这是强烈支持32位的一种。blogs.msdn.com/b/ricom/archive/2009/06/10/...
塞缪尔·内夫

2
@SamuelNeff:虽然最初的问题可以回答“ x86上为4字节; x64上为8字节”,但这个问题本身并不是很有趣或有见地。知道8字节对象引用对性能的影响似乎有些洞见。
supercat

21

为了确定指针大小,您可以使用System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)),或sizeof(IntPtr)在不安全的环境。

编辑:

或者IntPtr.Size


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.