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

C程序的内存空间

时间:2014-09-18 16:26:24      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   数据   art   sp   代码   log   c   

一个C程序在内存空间里面主要包括以下几个部分:
1,代码段
2,数据段
3,栈
4,堆

   代码访问代码段,数据段放静态和全局变量,函数参数和局部变量放在堆栈里面,堆里面存是malloc分配的区域
   堆栈里面是一个栈的结构,往里push东西的时候就小的数据就是向整形,浮点型这类基本的数据。但是stack有一个更大的单位,那就是stack frame,一个函数通常对应一个stack frame,在stack frame里面存放的依次是进入函数后执行的第一条指令地址,参数(一般是从右往左压入参数),局部变量。栈的分配方式又两种,一种是静态分配,编译器来分配。第二种是动态分配,调用malloca来进行分配,哲中动态分配的方式和heap的动态分配方式不太一样,在stack上分配的内存无须程序员自己回收。程序返回的时候,就回收了。
   heap是动态分配的,理论上来讲heap的空间可以很大,大到沾满整个空间,他是C/C++库函数提供的接口,而不向stack那样是操作系统原生的,所以heap比stack慢一些,操作系统有专门的stack register。
   stack是一块连续的区域,固定大小的,在编译时期确定,windows下默认的是2M,而heap是不连续的区域,当你new一个地址的时候,会去访问操作系统执行的一个free list,然后根据算法选定一块合适的区域然后分配的程序,记录到heap里面,会在这个端上记录大小,free的时候就可以根据地址来释放大小。
ffff   
   heap
   ----
   stack
0000
heap增长方向是向着地址增长方向,stack是向着地址减小的方向
 
资料:
  http://blog.csdn.net/rujielaisusan/article/details/4622197
  http://blog.csdn.net/yeyuangen/article/details/6766567

C程序的内存空间

标签:blog   http   ar   数据   art   sp   代码   log   c   

原文地址:http://www.cnblogs.com/championlai/p/3979286.html

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