3

这是我的理解。

在 C 编程中,如果我这样做int aa是在堆栈上创建的,因此内存是从堆栈中获取的。堆在这里不起作用。

但是如果我做类似的事情

int *a;
a=(int*)malloc(sizeof(int));

并动态分配内存,然后引用变量将被放置在堆栈上,但它指向的内存将在堆上。

我的理解正确吗?

现在,我拿起这本关于 java 的书,上面写着

每当您需要一个对象时,您只需编写代码以使用 new 来创建它,并且在执行该代码时在堆上分配存储空间。

那么没有办法在 Java 中的 Stack 上创建对象吗?

我想,原始数据类型仍然可以放在堆栈上,但我担心对象。

4

3 回答 3

7

在 Java 中无法在堆栈上创建对象。Java 还具有自动垃圾回收功能,因此您无法删除对象。您只是让对它们的所有引用超出范围,最终垃圾收集器会处理它们。

于 2013-07-08T20:31:15.967 回答
5

那是对的。对象存储在堆上。堆栈包含原始值,如intdouble(来自局部变量)和对对象的引用(同样来自局部变量)。

于 2013-07-08T20:32:14.080 回答
0

您问题的整个前提是错误的:在 Java 中,您无法控制分配对象的位置。有些确实是堆栈分配的,但您永远不会注意到差异。

Java 和 C 之间的根本区别在于,在 Java 中,变量的值永远不能是对象本身,而在 C 中,值可以是struct自身,没有间接性。您可以将此类结构按值传递给其他函数,Java 中没有类似的功能。

于 2013-07-08T20:47:17.227 回答