C/C++中内存模型

2015/04/06 12:24
阅读数 2.6K

 一直以来,C++中内存模型和Java内存模型结构就是困扰我的大问题,这在面试中也经常考到。经过长期卓绝地学习,终于得到下面这个最终解决方案:)

 

     C++内存分为5个区域(堆栈全常代 ):

 

1. 堆 heap :

                   由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete)。如果程序员没有释放掉,在程序结束时OS会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”

 

2. 栈 stack :

                   是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数。

                   存放在栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据也就自动释放了。

 

3. 全局/静态存储区 (.bss段和.data段) :

                   全局和静态变量被分配到同一块内存中。在C语言中,未初始化的放在.bss段中,初始化的放在.data段中;在C++里则不区分了。

 

4. 常量存储区 (.rodata段) :

                   存放常量,不允许修改(通过非正当手段也可以修改)

 

5. 代码区 (.text段) :

                   存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)

 

 

参考文献:

1. <系统程序员成长计划> P22~

2. C++堆、栈、全局/静态存储区、常量存储区http://www.cnitblog.com/guopingleee/archive/2009/02/16/54601.html

3. <程序员的自我修养> P61~   3.3 挖掘SimpleSection.o,但是这里是介绍的ELF格式目标文件结构(即文件在磁盘上的存储结构),和“内存中的结构”还是有区别的,注意区分


展开阅读全文
打赏
0
11 收藏
分享
加载中
13101210122
2015/04/06 17:21
回复
举报
更多评论
打赏
1 评论
11 收藏
0
分享
返回顶部
顶部