C#引用类型占用多少内存?

14

C#中一个引用需要消耗多少内存? 引用本身会像对象一样消耗内存吗?

3个回答

26

引用(reference)是通过指针(pointer)来实现的,在运行在x86模式(32位)的应用程序中,一个引用占用4个字节,在x64模式(64位)的应用程序中,一个引用占用8个字节。

由于引用(reference)只是指向一个对象的指针,所以无论它指向什么,甚至是空(null),它的大小始终相同。


我本来想回答这个问题,但当我开始思考一个引用的创建和维护肯定会涉及一些额外的内存开销时,我停了下来。 - Ashigore
1
@Ashigore:实际上,引用本身没有任何开销,它只是一个指针。任何开销都与对象相关,比如类型信息和垃圾回收引用。 - Guffa
有趣,谢谢你澄清了这个问题。 - Ashigore
3
踩贴者:为什么要踩贴?如果你不解释哪里出了问题,答案就无法得到改进。请说明问题,这样才能有所提高。 - Guffa

15

一个引用占用正在运行的平台的本机字长。

也就是说,32位:32位。 64位:64位。

因此,不管你的对象大小如何变化,引用始终如上所述保持不变。


7

来自C# 5.0 in a Nutshell: The Definitive Reference的第22页;

引用类型需要为引用和对象分别分配内存。对象消耗与其字段一样多的字节,再加上额外的管理开销。精确的开销本质上是私有的,属于.NET运行时实现的范畴,但最小开销为8个字节,用于存储指向对象类型的关键字,以及临时信息(如多线程的锁状态)和标志,以指示是否已通过垃圾回收器固定了该对象的移动。每个对对象的引用都需要额外的4或8个字节,具体取决于.NET运行时是否在32位或64位平台上运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接