从java 转到c++的注意点

1)栈区:由编译器自动分配和释放 
一般存放函数的参数值、局部变量的值等 
2)堆区:由程序员分配及释放。若程序员不释放,程序结束后可能由OS回收 
3)寄存器区:用来保存栈顶指针和指令指针 
4)全局区(静态区):全局变量和静态变量是存储在一起的。初始化的和未初始化的是分开的。 
程序结束后由系统释放 
5)文字常量区:程序结束后由系统释放 
存放常量字符串 
6)程序代码区:存放函数体的二进制代码

我知道在JAVA里也有堆和栈的区分,但在写代码时并不考虑他们之间的区别,因此很多人不是非常清楚。 
1.JAVA堆栈和C++堆栈管理原理不同。本身双方的堆栈管理者就不同。C++自己并不管理堆栈,直接使用OS提供的接口来管理。JAVA的堆栈由JVM管理,JVM为了实现垃圾回收机制,以及解决堆效率等问题,在堆管理方面做了一些改进。在JAVA内存管理有简单的说明,这里不做深入。 
2.JAVA堆栈与C++堆栈的实现效果类似。栈是程序运行时空间,由栈帧组成,由栈顶指针控制,分配和释放内存的效率高,但使用不灵活。堆用于动态地管理程序中的对象,使用灵活,但效率相对栈来说低一些。 
3.JAVA堆栈与C++堆栈的使用方式不同。JAVA仅使用栈做程序运行以及简单类型的存放,所有的对象都放在堆中的管理。C++的堆和栈都可以用于存放对象,以哪种方式管理对象取决于开发人员的代码。(重要)

定义变量和数组时,Java默认初始化,C++不初始化; 
在类中,方法中定义变量、动态数组时,Java默认初始化,C++不初始化

Java中有垃圾回收机制,C++没有。 
Java中有垃圾回收机制,Java中new对象后不用管,不用考虑释放;虚拟机会自动去回收内存;C++中new了对象或分配内存后一定要记得释放,不然就会内存泄漏;要使C++创建对象自行释放,要自己实现一套引用计数的机制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值