问题描述
void delay(a){
for (int i=a;i>0;i--)
for (int j=0; j<200;j++)
}
但是当我通过sdcc和keil编译这段代码,并在8051芯片上运行时。 结果就是sdcc编译的delay函数比keil编译的函数运行慢很多。
谁能告诉我为什么...
解决方法
不同的编译器在机器语言中使用不同的实现。有几个问题,不限于,但我脑海中突然出现的:
- 没有翻译成机器代码的标准定义:每个编译器都可以使用符合标准的任何解决方案。可能的解决方案不止一种。
- 不同的编译器行为:每个编译器都有自己的一组选项来更改特定的生成变体。
- 优化级别:例如,空循环可能会被完全优化掉。
- 变量分配:编译器可以自由选择寄存器或 RAM 单元以用于其变量。
- (在您的情况下)
int
的位宽:可能与 SDCC 和 Keil 相同,但有时存在差异。