我在阅读 Bjarne Stroustrups:使用 C++ 的原理和实践时,在第 8.5.8 章中遇到了有关调用堆栈和激活记录的以下内容:
对于合理的函数(比如我们直接或 在本书中间接使用),制定一个的运行时成本 功能激活记录不取决于它有多大。
但他没有解释运行时成本实际上取决于什么。
答案很大程度上取决于平台,但一般来说,激活记录的成本固定为将返回地址和帧指针放在堆栈上并为局部变量分配空间。
这些操作偶尔会触发“堆栈保护页”,从而触发操作系统为堆栈分配更多内存页,但此成本与调用堆栈深度成正比,因此会分摊到所有函数调用上。