Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208296
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 824
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-12 21:40
个人简介

只有今天的埋头,才有明天的出头。

文章分类

全部博文(80)

文章存档

2014年(80)

我的朋友

分类: C/C++

2014-10-13 22:56:10

栈在程序中用于维护函数调用上下文,没有栈就没有函数,没有局部变量。栈保存了一个函数调用所

需的维护信息:函数参数、函数返回值、局部变量、函数调用上下文。


为什么有了栈还需要堆?

栈上的数据在函数返回后就会被释放掉,无法传递到函数外部,而堆被程序申请使用的内存在程序中

释放前将一直有效,满足了程序的另一种需求。


系统对对空间管理方法——空闲链表法

系统会根据申请的内存大小去选择最接近的那块内存,然后断开链接点把内存给申请下来,如果不断

申请的话,当堆空间为NULL时,堆空间申请不成功,函数返回NULL自动退出。

程序静态存储区随着程序的运行而分配空间直到程序运行结束。在程序的编译期静态存储区的大小

就已经确定。程序的静态存储期主要用于保存程序中的全局变量和静态动量,与栈和堆不同,静态

存储区的信息最终会保存到可执行程序中。

小结:


栈、堆和静态存储区是c语言常涉及的三个基本内存区,栈区主要用于函数调用的使用,堆区主要

是用于内存的动态申请和归还,静态存储区用于保存全局变量和静态变量。

阅读(1172) | 评论(0) | 转发(0) |
0

上一篇:动态内存分配

下一篇:程序的内存布局

给主人留下些什么吧!~~