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

heap和stack的差别

时间:2015-04-19 16:12:06      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:

在进行C/C++编程时,需要程序员对内存的了解比较精确。经常需要操作的内存可分为一下几个类别:

  • 栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;
  • 堆区(heap):一般有程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表;
  • 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放;
  • 文字常量区:常量字符串就是放在这里的。程序结束后由系统释放;
  • 程序代码区:存放函数体的二进制代码

PS:
每个进程在执行的时候,内核都会给其分配一块内存,称为进程地址空间。
这里面除了固定的代码段(存放代码)、数据段、常量段、bss段等,其他的部分会被堆和栈进行共享

栈部分主要负责保存进程的运行上下文,比如函数调用的参数、返回值,包括上一级的函数入口等等;同时函数中定义的临时变量(auto变量)也保存在栈空间中。当函数结束返回的时候,相应的变量也就失效

堆则主要用于动态内存分配,比如malloc,就是从堆中进行分配内存(当然也可以指定从栈中分配,但是一般比较少见)。从堆中动态分配的内存有个特点,其需要程序主动去释放内存,比如free,如果不进行释放,则会造成内存泄露

heap和stack的差别

标签:

原文地址:http://blog.csdn.net/lf644206005/article/details/45129951

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