考虑下面的C代码-
char sum_char(char a,char b)
{
char c = a+b;
return c;
}
它涉及到-
我的问题是-
发布于 2012-10-02 06:32:45
char
s上执行算术操作,则在char
s上执行算术操作。让优化器负责删除平台上所有不必要的指令。在大多数情况下,CPU具有与C语言所要求的语义兼容的指令,因此生成的代码将非常短。当然,如果不需要对签名字符执行操作,则可以对无符号字符执行操作。这就消除了大量的符号扩展。
发布于 2012-10-02 06:28:44
您描述的转换仅在抽象机器中执行。如果编译器导致相同的可观察行为,则可以将所有这些都快捷。
当打开优化时,我的编译器将其转换为以下汇编程序
sum_char:
.LFB0:
.cfi_startproc
leal (%rsi,%rdi), %eax
ret
.cfi_endproc
.LFE0:
.size sum_char, .-sum_char
这只是一个加法(隐藏在leal
指令中)和一个ret
跳转。
发布于 2012-10-02 06:28:27
c
变量,只需使用return (char) (a + b);
。尽管如此,我不认为在这个函数中有太多需要“优化”的地方。它应该编译成很少的代码。如果你能得到它的内联,它很可能是按一个指令。https://stackoverflow.com/questions/12692209
复制相似问题