`です

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-22 18:29:14189ブラウズ

Is `

は < <=?

比較演算子 < を使用した一般的な if ステートメントよりも高速です。または <= の場合、< とみなされる場合があります。単一のステップまたはバウンドがあるため、より高速になります。しかし、この仮定は正しくありません。パフォーマンスへの影響は無視できます。

マシン コード生成

x86 を含むほとんどのアーキテクチャでは、整数比較では次のマシン命令が使用されます。

  • EFLAGS レジスタを変更する test または cmp 命令
  • ジャンプ命令(Jcc) 比較タイプに基づく

ジャンプ命令には、jne (等しくない場合にジャンプ)、jz (ゼロの場合にジャンプ)、jg (大きい場合にジャンプ) などが含まれます。

コード例

次のことを考えてください。例:

if (a < b) {
    // Do something 1
}

if (a <= b) {
    // Do something 2
}

コンパイラによって生成されたアセンブリ コードを比較すると、使用されるジャンプ命令 (jge と jg) に違いがあることがわかります。

if (a < b)
mov eax, [a]
cmp eax, [b]
jge .L2
// Do something 1

if (a <= b)
mov eax, [a]
cmp eax, [b]
jg .L5
// Do something 2

したがって、マシンコードの唯一の違いはジャンプ命令であり、比較自体に同じ量の処理が必要であることを示しています。 time.

浮動小数点

同じ原則が x87 浮動小数点比較にも適用されます。コンパイラは、両方の < に対して同じ数の命令を生成します。

結論

演算子の数の違い (< と <=) にもかかわらず、整数比較のパフォーマンスの差はわずかです。ほとんどのアーキテクチャで。使用されるジャンプ命令 (jge と jg) の実行には同じ時間がかかります。浮動小数点比較にも同じことが当てはまります。

以上が`ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。