3

以下代码段之间是否有区别:

  1. while (a==b);
  2. while (a==b) {;}

它会对编译器或执行时间产生影响吗?

此问题的背景:目前 FW 使用代码 1,其中 a 或 b 实际上是全局变量,FW 在特定核心中挂起/等待,直到另一个核心满足条件。我们想在 SystemC 中模拟此代码,并且此“无限”while 循环不在 SystemC 上下文中,因此 SystemC 调度程序将不知道该线程正在等待另一个线程,从而导致死锁。

因此,我们想将代码替换为:while (a==b) {CONTEXT_SWITCH(1);}

我们在哪里进行目标构建:

#define CONTEXT_SWITCH(x)

对于 systemC 构建,我们有:

#define CONTEXT_SWITCH(x)   wait(x) //where wait is a systemC wait

在目标构建的情况下,此代码变为代码 2。想知道这是否会以某种方式影响性能?

4

4 回答 4

8

它会对编译器或执行时间产生影响吗?

不,完全一样。在运行时不会有任何差异,编译时间的差异对于解析来说是可以忽略不计的差异{;}

如果您出于任何原因必须选择一个,请选择一个能让您更清楚其意图的那个。

于 2013-05-11T12:39:07.670 回答
1

一个好的主流编译器会生成一些准确的汇编代码。所以不,实际运行时性能没有差异。

至于你选择哪一个,这是一个感知问题。选择您规定的编码标准。

于 2013-05-11T12:40:01.070 回答
0

不,它应该对性能绝对没有影响。

大括号不会生成这样的代码。编译器使用它们来确定复合语句的开始和结束,仅此而已。对于编译器,复合或单个语句的处理方式相同 - 大括号只是为了让编译器知道您想要作为 while 循环的语句执行什么。

于 2013-05-11T12:50:20.463 回答
0

当我们编写 while(a==b); 时,两者将具有相同的执行时间。编译器会在内部将其转换为 while(a==b){;}。因此,您以哪种形式编写它并不重要。

于 2013-05-11T14:26:36.400 回答