【发布时间】:2021-10-27 04:40:53
【问题描述】:
如果函数指针指向内存代码段内的函数,当使用函数指针调用该函数时,该函数是否会获得自己的堆栈帧。
【问题讨论】:
-
我的印象是,您认为在 C 中通过函数名称调用函数与通过函数指针调用函数是有区别的。实际上,一旦 C 被编译成机器代码,所有函数调用最终都会成为
call指令,它将函数的第一条指令的地址作为操作数(或包含该地址的寄存器)。实际上,每次你调用一个函数时,你都在使用它的地址(语言只是对你隐藏它)。 -
在机器码中,从函数指针调用函数与直接调用没有区别。
-
注意:C99 标准包含 0 次提及单词
stack,另外 0 次提及单词frame。从技术上讲,您可以有一个不使用堆栈帧的实现。所以“与普通函数调用相同”,请注意这可以是或否取决于编译器。