C#中一个引用需要消耗多少内存? 引用本身会像对象一样消耗内存吗?
引用(reference)是通过指针(pointer)来实现的,在运行在x86模式(32位)的应用程序中,一个引用占用4个字节,在x64模式(64位)的应用程序中,一个引用占用8个字节。
由于引用(reference)只是指向一个对象的指针,所以无论它指向什么,甚至是空(null),它的大小始终相同。
一个引用占用正在运行的平台的本机字长。
也就是说,32位:32位。 64位:64位。
因此,不管你的对象大小如何变化,引用始终如上所述保持不变。
来自C# 5.0 in a Nutshell: The Definitive Reference的第22页;
引用类型需要为引用和对象分别分配内存。对象消耗与其字段一样多的字节,再加上额外的管理开销。精确的开销本质上是私有的,属于.NET运行时实现的范畴,但最小开销为8个字节,用于存储指向对象类型的关键字,以及临时信息(如多线程的锁状态)和标志,以指示是否已通过垃圾回收器固定了该对象的移动。每个对对象的引用都需要额外的4或8个字节,具体取决于.NET运行时是否在32位或64位平台上运行。