0

「変数を設定する」と「条件を確認してから変数を設定する」の速度の違いはありますか?

じゃあ使ったほうがいいの?

    if (state != IDLE) {
       state = IDLE;
    }

それ以外の

    state = IDLE;

?

最初のケースでは、フラグのチェックに時間がかかります。しかし、この期間を 2 番目のケース (変数を設定するだけ) と比較できますか? 一般的にどちらが速いですか?

ありがとう、マーティン

編集: プログラムは、CAN メッセージを受信する IRQ ハンドラー内で 120 MHz のマイクロコントローラー (NXP LPCXpresso 1769) で実行されます。私が尋ねている理由は、IRQ ハンドラーが通常のプログラムの実行を妨げたくないからです。

4

3 に答える 3

2

簡単な答えは、ほとんどの場合、値を書き込むだけで少なくとも同じくらい速くなり、多くの場合、最初にテストするよりも速くなるということです。

より詳細な説明:非常にローエンドのマイクロコントローラーを除いて、メモリ バスは通常、コアから切り離されます。最初にテストする場合、CPU はメモリ バスにアドレスを書き込んでから、メモリが応答するのを待ってから、実際に値を確認する必要があります。

書き込みを行うと、CPU は通常、アドレス/値を書き込みキューに入れ、次の命令に移動します。メモリ トランザクションが関係しています、他の命令の実行はそれが完了するのを待ちません (その値を読み取る場合を除きます。その場合、CPU にキャッシュがあるかどうかによって異なります。ある場合は、最小限の遅延でキャッシュから値を読み取りますが、それ以外の場合は通常、メモリに書き込まれるのを待ってから読み取ります)。

于 2012-06-10T17:35:37.670 に答える
1

理論的には:

最初の例には 2 つの操作があります。

  1. 状態を確認する
  2. 状態を変更する

2 番目の例には 1 つの操作があります。

  • 状態を変更する

したがって、数学的/論理的に、実行する操作が1つ少ないため、明らかに最初の例の方が2番目よりも高速です。

特に:

使用されている変数に応じて、スマート コンパイラは最初の例と 2 番目の例の両方を最適化して、同じアセンブリ命令を生成する場合があります。
したがって、どちらも同じパフォーマンスになる可能性があります。

正確な決定:

代表的なデータセットを使用して両方を使用してアプリケーション/コードをプロファイリングすると、適切な全体像と比較が得られます。

于 2012-06-10T17:35:47.033 に答える