【发布时间】:2017-06-23 19:42:34
【问题描述】:
例如,假设您有一个变量c,由于 CPU 的优化,您可以放心地假设它存储在寄存器中。以下哪个更快?
c = getchar();
if( c == 033 ){
putchar( 033 );
…
}
或
c = getchar();
if( c == 033 ){
putchar( c );
…
}
我猜第一个会更快,因为它使用立即寻址而不是寄存器访问。我的假设正确吗?
【问题讨论】:
-
您应该假设编译器将为两者生成相同的代码,使用立即寻址或寄存器寻址中的任何一个更快。你不应该担心它。在这种情况下,我会写
putchar(c),因为我认为这样的代码总体上更具可读性,但理性的人可能会不同意。如果您不使用八进制并且没有在括号内放置空格,它也会更具可读性。 -
看反汇编。我真的不在乎差异。
-
我会启动一个精密基准测试器并对其进行测试。
-
微优化产生微改进。
-
考虑到调用 putchar 所消耗的数千个(数百万个?)时钟周期,两者之间的任何差异都可以忽略不计。始终专注于首先编写清晰易懂的代码,并且仅在速度出现问题时才进行优化。然后,不要浪费时间在这些微小的收益上,看看你的算法,看看它们是否可以改进。
标签: c assembly addressing-mode