分类: C/C++
2014-10-13 22:56:10
栈在程序中用于维护函数调用上下文,没有栈就没有函数,没有局部变量。栈保存了一个函数调用所
需的维护信息:函数参数、函数返回值、局部变量、函数调用上下文。
为什么有了栈还需要堆?
栈上的数据在函数返回后就会被释放掉,无法传递到函数外部,而堆被程序申请使用的内存在程序中
释放前将一直有效,满足了程序的另一种需求。
系统对对空间管理方法——空闲链表法
系统会根据申请的内存大小去选择最接近的那块内存,然后断开链接点把内存给申请下来,如果不断
申请的话,当堆空间为NULL时,堆空间申请不成功,函数返回NULL自动退出。
程序静态存储区随着程序的运行而分配空间直到程序运行结束。在程序的编译期静态存储区的大小
就已经确定。程序的静态存储期主要用于保存程序中的全局变量和静态动量,与栈和堆不同,静态
存储区的信息最终会保存到可执行程序中。
小结:
栈、堆和静态存储区是c语言常涉及的三个基本内存区,栈区主要用于函数调用的使用,堆区主要
是用于内存的动态申请和归还,静态存储区用于保存全局变量和静态变量。