c中堆和JAVA堆的区别_C / Java中的堆栈与堆

这是我的理解。

在C语言编程中,如果我执行int a,那么a是在堆栈上创建的,因此内存是从堆栈中获取的。堆在这里不起作用。

但是如果我做一些像

int *a;

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

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

我的理解正确吗?

现在,我用JAVA写了这本书

Whenever you need an object, you

simply write the code to create it by using new, and the storage is allocated on the

heap when that code is executed.

那么在Java中没有堆栈对象的创建方法吗?

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

现代的JVM能够跳过一些短期对象的堆使用,并在执行及时编译步骤时将它们扔到堆栈上。但是你无法控制这一切。

对您所说内容的一个修正:在C语言中,在您提到的第一种情况(int a)中,只有当a是函数的局部变量(并且没有声明为静态变量)时,它才会存储在堆栈上。如果声明为全局或静态,则存储在数据段中,并细分为只读数据(如字符串常量)和未初始化数据(BSS)。在第二种情况下,对分配的内存区域的引用也会发生同样的情况。

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

没错。对象存储在堆中。堆栈包含原始值,如int和double(来自局部变量)和对对象的引用(同样来自局部变量)。

您的问题的整个前提是错误的:在Java中,您无法控制对象将被分配到何处。有些确实是堆栈分配的,但您永远不会注意到区别。

Java和C之间根本不同的是,在Java中,变量的值永远不能是对象本身,而在C中,值可以是EDCOX1×2本身,而不是间接的。您可以将这些结构按值传递给其他函数,在Java中没有等价的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值