在C / Java中堆栈vs堆

这是我的理解。

在C编程中,如果我做int a那么在堆栈上创建a ,从而从栈中获取内存。 堆在这里不起作用。

但是,如果我做了类似的事情

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

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

我的理解是否正确?

现在,我拿起了关于java的这本书

无论何时你需要一个对象,你只需编写代码来使用new来创建它,并且在代码执行时将存储分配到堆上。

所以没有办法在Stack中创建Java对象?

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


在Java中无法在堆栈中创建对象。 Java也有自动垃圾收集功能,所以你没有任何删除对象的方法。 你只是让所有对它们的引用超出范围,最终垃圾收集器会处理它们。


那是对的。 对象存储在堆上。 堆栈包含像intdouble (来自局部变量)和对象引用(再次来自局部变量)等原始值。


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

Java和C之间根本不同的是,在Java中,变量的值永远不会是对象本身,而在C中,值可以是struct本身,而不是间接的。 您可以将这些结构按值传递给其他函数,并且在Java中没有相同的结果。

链接地址: http://www.djcxy.com/p/259.html

上一篇: Stack vs Heap in C/Java

下一篇: Size of stack and heap memory