3网合一网站,vps 网站能打开,营销型网站有哪些建设流程,淮安建设网站制作从栈开始的一场C语言探险记 —— C语言函数是如何与栈共舞的。
栈的舞步解析
通过一个简单的例子来看看这支舞蹈#xff1a;
int add(int a, int b) {int result a b;return result;
}int main() {int x 10;int y 20;int sum add(x, y);retur…从栈开始的一场C语言探险记 —— C语言函数是如何与栈共舞的。
栈的舞步解析
通过一个简单的例子来看看这支舞蹈
int add(int a, int b) {int result a b;return result;
}int main() {int x 10;int y 20;int sum add(x, y);return 0;
}
1. 预备动作Prologue
当 main 调用 add 函数时栈会经历以下步骤
1. 保存返回地址 2. 保存旧的栈基址EBP 3. 设置新的栈基址 4. 为局部变量分配空间
栈的变化就像这样 栈帧高在哪里妙~在何处
栈帧就像俄罗斯套娃
每个函数调用都会创建一个新的套娃栈帧每个套娃都完美地保存了函数需要的所有信息函数返回时就像拆开套娃一样优雅地回到上一层 常见的舞蹈事故
栈溢出
void recursive() {recursive(); // 无限递归套娃堆太高就倒了
}
野指针
int* danger() {int local 42;return local; // 想带走舞伴的电话但舞会已经结束了
} 最后最后
栈就像是程序的记忆每一帧都记录着函数执行的关键信息。理解它的工作原理就像是理解了程序运行的记忆系统。
程序栈如人生层层递进步步回溯。每一次函数调用都是一次新的冒险每一次返回都是一次圆满的归来。 本文只是一个粗略的描述希望能帮助你更简单的理解这个过程更为细致的讲解也会后续写成文章与大家分享。最后别忘了点赞关注~ 我是旷野探索无尽技术