C++中的函数名问题
C++中的函数名作为常量存放在哪? 为何函数名和函数名取地址(&)是一样的,在这一点上是不是不能说它等同于指针(因为指针取地址是指针的地址)?
[解决办法]
函数涉及的是函数调用的入口地址,本身不存在取地址一说,只是为了兼容取地址和解引用这种习惯用法,规定了取地址之后还是同一个入口地址。
[解决办法]
函数名没有常量表,在编译器处理过程中,所有的函数都会被解析成地址调用。它不需要进行函数查表的工作。
例如:
void fun() {...}
int main() {
fun();
return 0;
}
上述代码被编译后,首先会有一段对应于fun的代码存留在内存中,程序生成后,每个函数都会在固定的位置被加载,即函数地址是固定的。所以编译器可以“聪明”地认为,所有用到fun函数的地方,只需要直接call 一下它的地址就可以了。
call是汇编指令,用于调用子进程(即我们所说的方法)。