C语言程序栈

来源:这里教程网 时间:2026-02-16 13:46:58 作者:

本文介绍C语言中的程序栈。

程序栈是支持函数执行的内存区域,通常和堆共享。

也就是说,它们共享同一块内存区域。程序栈通常占据这块区域的下部,而堆用的则是上部。

程序栈存放栈帧(stack frame),栈帧有时候也称为活跃记录(activation record)或活跃帧(activation frame)。

栈帧存放函数参数和局部变量。堆管理动态内存,已经在2.2.1节中讨论过了。

下图从原理上说明了栈和堆的结构。这个说明基于以下代码片段。

void function2() {    Object *var1 = ...;    int var2;    printf("Program Stack Example\n");}void function1() {    Object *var3 = ...;    function2();}int main() {    int var4;    function1();}

调用函数时,函数的栈帧被推到栈上,栈向上“长出”一个栈帧。当函数终止时,其栈帧从程序栈上弹出。栈帧所使用的内存不会被清理,但最终可能会被推到程序栈上的另一个栈帧覆盖。

动态分配的内存来自堆,堆向下“生长”。随着内存的分配和释放,堆中会布满碎片。尽管堆是向下生长的,但这只是个大体方向,实际上内存可能在堆上的任意位置分配。

相关推荐