【发布时间】:2014-10-28 17:57:59
【问题描述】:
我正在构建其中一个项目,并且正在查看生成的列表文件。(目标:x86-64)我的代码如下所示:
int func_1(var1,var2){
asm_inline_(
)
func_2(var1,var2);
return_1;
}
void func_2(var_1,var_2){
asm __inline__(
)
func_3();
}
/**** Jump to kernel ---> System call stub in assembly. This func in .S file***/
void func_3(){
}
当我看到汇编代码时,我发现在调用 func_2 和 func_3 时使用了“jmp”指令而不是“call-return”对。我确信这是编译器优化之一,我还没有探索如何禁用它。 (海合会) 当我向 func_2 和 func_3 添加一些 volatile 变量并递增它们时,“jmp”就会被“call-ret”对替换。 我很困惑地看到这种行为,因为这些变量是无用的,它们没有任何用途。 有人可以解释一下这种行为吗?
谢谢
【问题讨论】:
标签: c linux gcc compiler-construction