而(A == B); vs while(a == b){;}

时间:2013-05-11 12:37:36

标签: c++ c systemc

以下代码之间是否存在差异:

  1. while (a==b);
  2. while (a==b) {;}
  3. 它会对编译器或执行时间产生影响吗?

    此问题的背景:目前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 个答案:

答案 0 :(得分:8)

  

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

没有。这是完全一样的。在运行时没有任何差异,编译时间的差异是解析{;}的可忽略的差异。

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

答案 1 :(得分:1)

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

关于你选择哪一个,这是一个感知问题。选择你有权使用的编码标准。

答案 2 :(得分:0)

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

大括号不会生成代码。编译器使用它们来确定复合语句的开头和结尾,没有别的。对于编译器,复合或单个语句的处理方式相同 - 大括号只是为了让编译器知道你想要什么作为while循环的语句。

答案 3 :(得分:0)

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