C++与Java的区别
2016-05-11 15:01
295 查看
毕设写是cocos, 用到的语言自然是C++,之前用的是Java,在写C++时,发现Java把局部变量的概念削弱了(C++ 确实比 Java 难写)
先列出几个定义
栈:函数运行时静态变量存放的地方,由于是静态变量,在编译时就已经给定了。
堆:函数运行时动态变量(即 new malloc),在运行时存放在堆中。
回收:栈的话,在运行这个函数之后,所有空间将被回收。给下一个函数存放。堆的话,除非delete,将一直存在,直到这个程序退出。(其实 内存泄漏,是针对这个程序而言的)
关于栈如下图所示:
运行hello()
运行结束,清空栈相关区域(所谓的“清空“并非清洗,数据仍在,只是置为可写,下次写入即替代掉)
运行world()
运行结束,清空栈相关区域
这就是静态变量,栈之间的关系。
上面有一处值得注意:
stu在运行hello结束之后即被回收,如果我在main中有一变量vector, 在hello中push(stu),执行hello结束后会怎么样呢?
想想如果发生在java上,会是如何?
这就是Java削弱了局部变量的概念,或者说Java将所有变量(至少类变量)都存放在堆上,所以无需考虑这东西
如果觉得有误的地方,欢迎指正。
如果觉得有道理,看在我画图的份上(LibreOffice画的,你懂的),给个赞。
先列出几个定义
栈:函数运行时静态变量存放的地方,由于是静态变量,在编译时就已经给定了。
堆:函数运行时动态变量(即 new malloc),在运行时存放在堆中。
回收:栈的话,在运行这个函数之后,所有空间将被回收。给下一个函数存放。堆的话,除非delete,将一直存在,直到这个程序退出。(其实 内存泄漏,是针对这个程序而言的)
关于栈如下图所示:
运行hello()
运行结束,清空栈相关区域(所谓的“清空“并非清洗,数据仍在,只是置为可写,下次写入即替代掉)
运行world()
运行结束,清空栈相关区域
这就是静态变量,栈之间的关系。
上面有一处值得注意:
stu在运行hello结束之后即被回收,如果我在main中有一变量vector, 在hello中push(stu),执行hello结束后会怎么样呢?
想想如果发生在java上,会是如何?
这就是Java削弱了局部变量的概念,或者说Java将所有变量(至少类变量)都存放在堆上,所以无需考虑这东西
如果觉得有误的地方,欢迎指正。
如果觉得有道理,看在我画图的份上(LibreOffice画的,你懂的),给个赞。
相关文章推荐
- TMP、TEMP和TMP文件区别解析
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- 关于IIS 对temp目录访问权限问题的解决方法
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- 使用C++进行Cocos2d-x游戏开发入门过程中的要点解析