0

我写了一个延迟函数:

void delay(a){
    for (int i=a;i>0;i--) 
        for (int j=0; j<200;j++)
} 

但是当我通过 sdcc 和 keil 编译这段代码,并在 8051 芯片上运行时。结果就是sdcc编译的delay函数运行起来比keil编译的函数慢很多。

谁能告诉我为什么...

4

1 回答 1

0

不同的编译器在机器语言中使用不同的实现。有几个问题,不仅限于,但我脑海中突然出现的问题:

  • 没有翻译成机器代码的标准定义:每个编译器都可以使用任何符合标准的解决方案。有不止一种可能的解决方案。
  • 不同的编译器行为:每个编译器都有自己的一组选项来更改特定的生成变体。
  • 优化级别:例如,可能会完全优化空循环。
  • 变量分配:编译器可以自由选择寄存器或 RAM 单元用于其变量。
  • (在您的情况下)的位宽int:可能与 SDCC 和 Keil 相同,但有时存在差异。
于 2021-05-07T06:00:01.660 回答