C语言函数调用栈-一.md

原始源文件

---
ingested: true
ingestedAt: 2026-05-14
---
标题: C语言函数调用栈(一)
UP主: clover_toeic
链接: https://www.cnblogs.com/clover-toeic/p/3755401.html
内容: 

# C语言函数调用栈(一)

程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复,以及存储局部变量。

## 1. 栈与栈帧

计算机程序使用堆栈来管理函数调用。每个函数调用都会创建一个新的栈帧(stack frame),栈帧中包含了该函数调用相关的信息。栈帧是栈上的一块连续内存区域,从高地址向低地址增长。

典型的栈帧布局包含以下内容:
- 函数参数(Arguments)
- 返回地址(Return Address)
- 旧的基址指针(Old EBP)
- 局部变量(Local Variables)
- 临时存储(Temporary Storage)