如何检查引用需要多少字节?

Son*_*nül 1 .net c# reference

来自Nutshell中的C#5.0:第22页的权威参考 ;

引用类型需要为引用和对象单独分配内存.该对象消耗与其字段一样多的字节,以及额外的管理开销.精确的开销对于.NET运行时的实现本质上是私有的,但至少开销是八个字节,用于存储对象类型的键,以及临时信息,例如多线程的锁状态和标志.指示它是否已被垃圾收集器移动固定.每个对象的引用都需要额外的四个或八个字节,具体取决于.NET运行时是在32位还是64位平台上运行.

我不太确定我完全理解这个大胆的部分.它说在32位平台上一个引用需要四个字节,在64位平台上它需要八个字节.

所以,让我们说我们有

string s = "Soner";
Run Code Online (Sandbox Code Playgroud)

如何检查此s引用所需的字节数?

Jon*_*eet 6

你可以用Environment.Is64BitProcess.如果是,则每个引用将为8个字节.如果不是,则每个引用将是4个字节.引用的类型以及它引用的对象的内容是无关紧要的.

编辑:如现在删除的答案中所述,IntPtr.Size甚至更简单.

编辑:正如评论中所述,虽然目前 CLR中的所有引用都是相同的大小,但在某些时候它可能会沿着类似的路径走向Hotspot,Hotspot在很多情况下使用"压缩oops"将引用存储为32即使在64位进程中也可以使用-bit值(不限制可用内存).

  • Simon Belanger的(删除)答案可能更好,使用IntPtr.Size.哪些仍然适用于那些未来的128位平台(虽然640K应该对任何人都足够) (4认同)