什么时候编译器会为C86语言生成x86_64的间接跳转?我们能告诉编译器禁用生成间接跳转吗?

时间:2014-11-29 19:24:05

标签: c gcc compiler-construction clang llvm

据我所知,编译器会为连续的大型交换机案例代码块,C ++的虚拟函数表以及某些尾部调用情况生成间接跳转。此外,指向函数的指针的间接调用(而不是跳转)。还有其他任何使用间接跳转的情况吗?

此外,除非必要,否则我们能告诉编译器(clang / llvm首选)不生成间接调用吗?

这个问题可能很奇怪,因为我正在研究这个问题。

1 个答案:

答案 0 :(得分:0)

间接跳转或调用通常涉及指针数组(地址)。除了切换案例序列之外,Microsoft编译器在调试模式下构建时会生成一个指向函数的指针数组(我很确定这不是在发布模式下完成的)。我不知道如何禁用它。还有一个用于切换上下文的间接调用,但这不应该是普通C / C ++代码的问题。