我甚至不确定我是否在这里使用了正确的条款,但如果我有这样的代码:(在C#中)
Object object1;
Object object2;
object1 = new Object();
object2 = object1;
object2会占用与object1一样多的空间,还是只指向在object1创建的实例?
如果我没有使用正确的条款来正确表达自己,请务必告诉我。
答案 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