首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆动态还是堆栈动态?

堆动态还是堆栈动态?
EN

Stack Overflow用户
提问于 2013-01-06 18:19:43
回答 3查看 12.5K关注 0票数 4

请解释一下,在这段代码中,"x“是堆栈动态变量还是堆动态变量?如果是堆动态变量,那么为什么不是堆栈动态变量?谢谢。

代码语言:javascript
复制
function foo(){ MyClass x = new MyClass();}
EN

回答 3

Stack Overflow用户

发布于 2015-12-20 21:43:32

调用函数时,堆栈动态变量就会出现。它们存在于C++运行时堆栈中,并且是临时的。它们要么在参数列表中,要么在函数中声明(除非在堆栈上没有实例化的静力学)。当这些变量超出作用域时,它们就会消失,其内容的内存将由运行时回收。

堆动态实例存在于运行时保留的另一个内存区域,称为“堆”。这些实例是通过。“新”运算符,必须由“删除”运算符显式取消分配。

我希望这能帮上忙

票数 8
EN

Stack Overflow用户

发布于 2013-01-06 18:38:58

我不知道这是哪种语言,我会说它只是伪代码,但是大多数普通的OO语言的概念应该是相同的。

让我们把这个分解一下:

代码语言:javascript
复制
function foo() {
    MyClass x = null;
    x = new MyClass();
}

第一行MyClass x = null将在本地堆栈上分配一些空间。它没有太多的空间,只是足够存储一个参考资料。

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

  1. 为MyClass的新实例在堆上分配空间
  2. MyClass调用正确的构造函数
  3. x引用更改为指向此新实例。

所以简单的答案是:两者都是。

票数 3
EN

Stack Overflow用户

发布于 2013-01-06 18:29:32

这个特定的例子是:Dynamic(我假设您在这里用JAVA编程)。为什么它不在堆栈上?

  • 这将分配内存。
  • 这不是一个自动变量

请参阅本文以获得一般指导:http://www.maxi-pedia.com/what+is+heap+and+stack

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14185235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档