ANSI C:如果函数指针指向可执行代码,那意味着执行开销比简单地调用函数要少吗?

S_B*_*alb 2 c optimization function-pointers c89

我们知道在C语言中使用函数指针在适当的场景中使用时非常有用(在运行时调用函数与编译时间,使代码更具可读性等),但是关于简单函数调用vs的文献并不多.使用函数指针.

void foo(void) {
    printf("hello\n");
}

int testFcn(void) {

    // simple invokation
    foo();

    return 0;
}

// Or, declare function pointer and assign
void (*myFunc)(void) = foo;

int testFcn(myFunc) {

    // Function pointer invokation.
    myFunc();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

也许唯一真正的方法是分析.lst文件和.map文件?

AnT*_*AnT 7

通常情况下,当函数指针存储在数据段的内存中时,通过这样的指针调用函数将涉及更多的开销,而不是更少的开销.

实际性能可能会有很大差异,具体取决于指针是否在CPU缓存中,已加载到CPU寄存器中,是否由分支预测机制和其他因素正确预测.