C程序栈

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

程序栈存放栈帧(stack frame),栈帧有时候也称为活跃记录(activation record)或活跃帧(activation frame)。栈帧存放函数参数和局部变量。堆管理动态内存,已经在malloc函数中讨论过了。

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

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

void function1() {
    Object *var3 = ...;
    function2();
}

int main() {
    int var4;
    function1();
}

图3-1:栈和堆

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

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

赞(2)

评论 抢沙发

评论前必须登录!

 

C指针