详细讲解函数调用原理

函数调用原理

这是一篇讲述函数调用原理的文章,通过大量的示意图从比较基础的概念开始阐述函数调用时堆栈的完整变化过程,同时还会通过一个具体例子来分析在X-64平台上函数的调用过程,从而理解函数调用原理。最后会提供几个例子来发现C语言函数栈帧的一些有意思的行为。

文章提供了gitbook的阅读方式。
github地址:github.com/acodercat/function-call...
如果对你有帮助,欢迎star!

目录

本文可以收获什么?

  • 函数间如何转移控制
  • 函数间如何传递数据
  • 栈帧的初始化与销毁
  • C/C++数组越界的危害
  • 为什么内联(inline)函数效率高
  • 为什么尽量用循环来代替递归调用
  • 为什么静态变量在函数返回后不会被释放
  • 什么是栈溢出攻击

其他

文中有一个重要的概念内存对齐没有提及,由于它不属于函数调用范畴之内,也就没有对它进行说明。我在构造示例时也避免了编译器为了内存对齐而出现一些额外指令,所以文中也见不到它的影子。如果你有兴趣可以通过网络去了解与它相关的内容。

相关资源

  • 书籍:

    《深入理解计算机系统》(第三版)

    《汇编语言》(王爽第三版)

  • 公开课:

    《编程范式》(斯坦福公开课)

绘图工具

文中所有图片都使用了excalidraw作为绘图工具,这是一款非常棒的在线绘图工具,它提供了不同风格的绘制模式。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!