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 に答える