参考需要多少空间?

时间:2014-03-18 18:22:36

标签: c#

我甚至不确定我是否在这里使用了正确的条款,但如果我有这样的代码:(在C#中)

Object object1;
Object object2;
object1 = new Object();

object2 = object1;

object2会占用与object1一样多的空间,还是只指向在object1创建的实例?

如果我没有使用正确的条款来正确表达自己,请务必告诉我。

4 个答案:

答案 0 :(得分:5)

引用只需要一个字的内存。这是32位应用程序中的32位,64位应用程序中的64位等等。

这两个变量只占用一个内存字,因为它们是引用类型。在某个地方也存在一些内存,但是对于一个实际的对象实例需要很多内存。程序中的这两个变量碰巧都包含对该对象的引用,但即使它们没有,它们也会占用相同的空间量。 (毕竟,空引用占用的空间与有效引用相同。)

答案 1 :(得分:0)

object2指向堆上与object1相同的底层对象。现在,如果这是一个值类型并且在方法范围内,那么它将被添加到堆栈中并占用更多内存。

如果您理解C或C ++指针的概念,则它们是相关的。

答案 2 :(得分:0)

它将指向同一个实例,您将只有两个引用堆上相同对象的变量。

答案 3 :(得分:0)

您可以通过查询代码IntPtr.Size来获取大小,根据您运行的32位或64位进程返回正确的大小。因此每个引用将占用IntPtr.Size个字节

http://msdn.microsoft.com/en-us/library/system.intptr.size(v=vs.110).aspx

C# sizeof object pointer (SAFE context)