c 和java 内存_c/c++和java的内存分配到底是怎么回事 -

本文由大魏网转载(、 )

今天遇到了这个问题,想搞的彻底些,查了些资料,还不太完善,望指教。

在c++中

栈中存放的是局部变量,函数的形参等东西,是程序自动为我们分配的,类似数据结构中的栈,先进后出

堆中存放的是new出来的东西,内存的申请与释放需要程序员手动完成,类似于数据结构中的链表

struct Student

{

int num;

char name[10];

};

Student *stu = new Student;

那么stu被分配在了栈中,而堆中则分配了4+10个字节吧,stu指向这个内存的首地址。

Student stu;在这句话中stu被分配在了栈中,那么他占据多少内存呢,是4+10个?还是语法错误,因为没有初始化?

自由存储区存放malloc分配的内存,是c语言中的用法,类似于堆。

静态区存放static申明的变量,不论是局部的或是全局的,不能用extern关键字来申明为其他区域。

常量区存放const申明的常量,给数据不可以改变。

在java中

同样是这些东西

Student stu=new Student;

stu存放在栈中,new出来的东西存放在堆中,stu这个引用指向了student。这些东西不必程序员去手动释放。

其他东西的存放类似于c++;

那么Student stu;

是否也是错误呢?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值