码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++中内存模型

时间:2015-04-06 12:59:14      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 一直以来,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格式目标文件结构(即文件在磁盘上的存储结构),和“内存中的结构”还是有区别的,注意区分


C/C++中内存模型

标签:

原文地址:http://my.oschina.net/u/1772925/blog/396464

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!