免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1496 | 回复: 3
打印 上一主题 下一主题

5 大分区? c++ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-06 13:48 |只看该作者 |倒序浏览
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)





刚才翻到了这个页面,感觉不对  google 了一下 并没其他的说法


..... 很多new 的实现就是 malloc 来做的。  怎么搞了5个分区出来?


  一般 能遇到的就是 静态 常量 堆和 栈。

某日面试也问这个,问 全局 静态 ,普通静态 分别在那里。 这个细节 不做编译器 不做内核真的很难知道。


这里 堆 和自由存储是同一个把?  要牛人印证。

论坛徽章:
0
2 [报告]
发表于 2011-04-06 13:51 |只看该作者
文章也是人写的嘛,更不排除烂人写的。

俺认为楼主已经理解了,不用鸟那些烂文章。

论坛徽章:
0
3 [报告]
发表于 2011-04-06 15:37 |只看该作者
text: 文本段,程序代码和常量

stack: 堆栈,本地变量和函数调用链接信息

heap: 堆,malloc和new都是从这里分配

bss: 未初始化的全局变量,标准规定这种变量的值为0、所以一般是使用到的时候动态装载到内存,并全部映射到一个为“0”的页面去。

已初始化全局或静态变量:这种变量直接存储在可执行文件中,程序执行时从可执行文件中装载。

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
4 [报告]
发表于 2011-04-06 15:47 |只看该作者
1. 俺第一听“自由存储区”,估计就是堆吧

2. 常量不是和.text在一起的??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP