说我有一个功能:
checkBoxWC = (CheckBox)findViewById(R.id.WCcheckBox);
checkBoxC = (CheckBox)findViewById(R.id.CcheckBox);
这会编译成void foo ( int bar ){
return;
}
指令吗?
答案 0 :(得分:6)
没有指定c ++标准应该做什么。但我会说任何体面的编译器都会优化这些代码,甚至不会留下nop
指令。
答案 1 :(得分:2)
现代编译器为某些目的发出nop
- 就像指令一样 - 通常用于对齐(如果目标与 - 例如 - 16字节对齐,许多架构分支上执行得更快)或者等待某些操作完成(在IA64上的IIRC,你必须等待一些循环才能使用某些操作码的结果,所以要么你还有别的事要做,要么你必须发出nop
s)。
现在,要么我们处于这种情况,要么很可能不会发出nop
。对于这样的函数,您可以期望常规堆栈框架设置,然后是非优化版本的清理,或者是优化版本中的普通ret
(加上调用约定强制执行的堆栈清理代码)。
更好的是,如果编译器足够智能并且在编译调用站点时已知该函数的定义(因此,这是一个static
函数,inline
一个或链接时间代码生成启用)可以完全省略调用,并且最终可执行文件中可能没有任何功能代码的痕迹。