堆动态还是堆栈动态?

时间:2013-01-06 18:19:43

标签: programming-languages heap callstack

请解释一下,如果“x”是这个代码中的Stack-Dynamic变量或Heap-Dynamic变量?如果它是Heap-Dynamic那么为什么它不是Stack-Dynamic变量?谢谢

function foo(){ MyClass x = new MyClass();}

2 个答案:

答案 0 :(得分:2)

我不确定这是什么语言,我会说它只是伪代码,但大多数常见OO语言的概念都应该相同。

让我们打破这个:

function foo() {
    MyClass x = null;
    x = new MyClass();
}

第一行MyClass x = null将在本地堆栈上分配一些空间。这不是很大的空间,足以存储参考。

第二行x = new MyClass()会做一些事情:

  1. 在堆上为MyClass
  2. 的新实例分配空间
  3. MyClass
  4. 调用正确的构造函数
  5. x引用更改为指向此新实例。
  6. 所以简单的答案是:两者都是。

答案 1 :(得分:1)

这个特定的一个是:Dynamic-Heap(我假设你在这里用JAVA编程)。至于为什么它不在堆栈上?

  • 这会分配内存
  • 这不是自动变量

有关一般说明,请参阅此文章: http://www.maxi-pedia.com/what+is+heap+and+stack