调用函数时堆栈上有什么?

sky*_*oor 2 c c++ compiler-construction callstack programming-languages

我只能想象1)参数; 2)局部变量;

还有什么?

1)功能返回地址?2)功能名称?

Sev*_*yev 5

它真的取决于平台和架构,但通常:

  • 功能返回地址
  • 保存的调用者CPU寄存器值 - 最重要的是调用者的堆栈帧指针值
  • 用alloca()分配的变量.
  • 有时 - 异常处理的额外内容,这是非常依赖于平台的.
  • 有时 - 保护值来检测堆栈崩溃

根据我的知识,函数名永远不会出现在堆栈中,除非您的代码放在那里.