【问题标题】:How big is an object reference in .NET?.NET 中的对象引用有多大?
【发布时间】:2010-09-27 03:17:41
【问题描述】:

.NET 中对象引用的大小是多少?它在 x86、x64 和/或 AnyCPU 编译之间是否有所不同?

如果它有所作为,我对 C# 很感兴趣。

【问题讨论】:

标签: c# .net reference


【解决方案1】:

引用本身基本上是一个指针。 32 位操作系统为 32 位,64 位操作系统为 64 位。

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

【讨论】:

  • 我想知道为什么 64 位 .net 会使用指针,而不是“对象”表的缩放偏移量?对于大多数应用程序来说,32 位缩放偏移应该已经足够了(需要超过 40 亿个对象的应用程序可以使用特殊的“superHumungous”内存模型),我认为使用缩放位移寻址的额外成本会更多而不是由改进的缓存并发性来弥补,这将导致对象引用的大小减半。
  • @supercat,.NET 开发人员可以选择将他们的应用程序编译为 32 位模式,并且所有指针都是 32 位的。这对于不需要 64 位指针的任何应用程序(绝大多数应用程序)来说可能是最好的。
  • @SamuelNeff:根据我读到的其他内容,64 位应用程序提供更好的性能,因为 64 位指令集允许使用更多寄存器并且通常更高效。我认为使用 32 位对象引用会进一步提高性能。
  • @supercat,有很多关于 32 位和 64 位性能的相互冲突的帖子。这是一个强烈支持 32 位的版本。 blogs.msdn.com/b/ricom/archive/2009/06/10/…
  • @SamuelNeff:虽然最初的问题可以回答为“x86 上的 4 个字节;x64 上的 8 个字节”,但这个问题本身不会很有趣或很有见地。了解 8 字节对象引用的性能影响似乎更有洞察力。
【解决方案2】:

要确定指针大小,您可以在不安全的上下文中使用System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr))sizeof(IntPtr)

编辑:

IntPtr.Size

【讨论】:

    【解决方案3】:

    对象引用基本上是指向包含对象属性的内存的指针。因此,该引用是一个处理器字长 - 在 32 位平台上为 32 位,在 x64 上为 64 位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多