A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© stud 中级黑马   /  2016-5-10 12:32  /  945 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存分:栈区,堆区,BSS代码区,数据段,代码区。分这么多区做什么?

1 个回复

倒序浏览
本帖最后由 kedt5200 于 2016-5-10 18:57 编辑

你搞混淆了,内存分为五大区:
堆区:我们平常分配的内存就从此来,需要我们自己管理,分配、释放,如果分配忘了释放,就会造成内存泄漏,然后我们可分配的内存就会越来越少,最终无法再分配时,造成程序崩溃。
栈区:用于函数内部局部变量,函数之所以可以递归执行就是因为栈的存在,函数返回的时候函数内部变量会自动释放,所以我们不能使用指向函数内部变量的指针,因为栈是由系统管理的,你不知道此变量什么释放而变得无效。
全局/静态变量区:两者区别在于编译器层次上的不同可见范围。实际上两者在内存中是同一个区块。
常量存储区:会在CPU层级上限制用户的修改。
至于你的说的,BBS代码区,数据段,代码区,应该是指程序文件中的划分,经过操作系统加载之后,对应的内容会加载到内存中对应的区域。我们每个程序都有一个虚拟独立的地址空间,相应的代码、变量会加载到这个地址空间中再由操作系统映射到实际的地址上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马