码迷,mamicode.com
首页 > 其他好文 > 详细

内存划分

时间:2016-05-23 01:12:51      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:内存划分

       技术分享作为一个程序员,或者励志要成为程序员的人,对于内存中的划分是必须要了如指掌的,我们不一定要去关心它的硬件实现,但在操作系统的层面上我们必须要清除内存到底是怎样划分的。


       这是一个令人头疼技术分享的问题,刚开始我分不清什么数据段,代码段,什么静态区,堆栈,堆……,感觉乱七八糟的,因此在网上搜了一下,在此稍微整理一下。



“xx段”和“xx区”到底是什么关系?


“段”是对一个完整的程序而言,“区”则是对整个内存而言


当然,程序中也可以用“区”的概念,只是不同的叫法可以对其加以区分技术分享


技术分享对于程序而言,一个完整的C/C++程序从编译到运行,他的内存占用

情况分为:

技术分享1、栈(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。


技术分享2、堆(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。


技术分享3、全局区/静态区(又称数据段)——全局变量和静态变量存储在这里。程序结束后由系统释放。在以前到C语言中,全局变量又细分为初始化的(DATA段)和未初始化到(BSS段),在C++里已经没有这个区分了,它们共同占用同一块内存区。


技术分享4、常量存储区——常量字符串就存放在这里。一般不允许修改。程序结束后由系统释放。


技术分享5、代码段——存放函数体的二进制代码。


技术分享对于内存而言(这里采用C++标准),划分为:


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


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


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


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


技术分享5.
常量存储区:    这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)


看起来虽然两者区别不大,但是还是有区别技术分享


技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享

本文出自 “11408774” 博客,请务必保留此出处http://11418774.blog.51cto.com/11408774/1775970

内存划分

标签:内存划分

原文地址:http://11418774.blog.51cto.com/11408774/1775970

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