C++与Java的区别

来源:互联网 发布:淘宝权微博 编辑:程序博客网 时间:2024/06/05 02:54

毕设写是cocos, 用到的语言自然是C++,之前用的是Java,在写C++时,发现Java把局部变量的概念削弱了(C++ 确实比 Java 难写)
先列出几个定义

栈:函数运行时静态变量存放的地方,由于是静态变量,在编译时就已经给定了。
堆:函数运行时动态变量(即 new malloc),在运行时存放在堆中。
回收:栈的话,在运行这个函数之后,所有空间将被回收。给下一个函数存放。堆的话,除非delete,将一直存在,直到这个程序退出。(其实 内存泄漏,是针对这个程序而言的)
关于栈如下图所示:
这里写图片描述
运行hello()
这里写图片描述
运行结束,清空栈相关区域(所谓的“清空“并非清洗,数据仍在,只是置为可写,下次写入即替代掉)
这里写图片描述
运行world()
这里写图片描述
运行结束,清空栈相关区域
这里写图片描述
这就是静态变量,栈之间的关系。
上面有一处值得注意:
stu在运行hello结束之后即被回收,如果我在main中有一变量vector, 在hello中push(stu),执行hello结束后会怎么样呢?
想想如果发生在java上,会是如何?
这就是Java削弱了局部变量的概念,或者说Java将所有变量(至少类变量)都存放在堆上,所以无需考虑这东西

如果觉得有误的地方,欢迎指正。
如果觉得有道理,看在我画图的份上(LibreOffice画的,你懂的),给个赞。

0 0
原创粉丝点击