問題タブ [micro-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 何が速いですか:多くのif、またはそうでなければif?
配列を反復処理し、値で曜日に並べ替えています。
それを行うために、私は多くのif
ステートメントを使用しています。if
一連のelse if
ステートメントと比較して、多くのを使用する場合、処理速度に違いはありますか?
c - Cプログラミングとerror_code変数の効率
私が今まで読んだほとんどのコードはint
、標準のエラー処理(関数などからの戻り値)にを使用しています。しかし、willコンパイラを使用することで得られるメリットがあるかどうか疑問に思っていますuint_8
-読み取り:ほとんどのアーキテクチャのほとんどのCコンパイラ-イミディエートアドレスモードを使用して命令を生成します-つまり、1バイトの整数を命令に埋め込みます?私が考えている重要な命令は、戻り型としてuint_8を使用して、関数が戻った後の比較です。
1バイト型を導入するとアライメントの問題が発生するため、私は間違って考えている可能性があります-コンパイルが4バイトにパックするようにコンパイルするのはおそらく完全に正しい理由であり、これがおそらく誰もがintを使用する理由です-そしてこれはヒープではなくスタック関連の問題であるため、実際のオーバーヘッドはありません。
正しいことをすることが私が考えていることです。しかし、議論のために、これはインテリジェントウォッチに人気のある安価なマイクロプロセッサであり、1kのメモリで構成されていますが、命令セットに異なるアドレッシングモードがあるとしましょう:D
ディスカッション(x86)を少し専門化するためのもう1つの質問は、次のとおりです。
と
同じタイプ?または、2番目のケースでは、コンパイラは8バイトのリテラルを生成します。その場合、それを使用して、リテラルを即値として、返されたintをレジスタ参照として持つ比較命令を生成できます。CMP命令タイプを参照してください。。
c - 実行パイプラインの保持
リターンタイプは頻繁にエラーがチェックされます。ただし、実行を継続するコードは、さまざまな方法で指定できます。
また
ヘビー級CPUが単純な統計を使用して近接/局所で取得されたブランチについて推測できる1つの方法-ゼロが不明で2であるブランチ推測(-2、-1,0、+ 1、+ 2)の4ビットメカニズムを研究しました真のブランチと見なされます。
上記の簡単なテクニックを考えると、私の質問はコードを構造化する方法についてです。主要なコンパイラと主要なアーキテクチャの間には慣習がなければならないと思います。これらは私の2つの質問です
- コードが、パイプラインがいっぱいになっているときにブール値がバイアスされる、頻繁にアクセスされるループではない場合はどうでしょうか。
- 分岐に関する推測は、true、false、または0のいずれかで開始する必要があります(パイプラインは何かで満たされている必要があります)。どちらになる可能性がありますか?
c - 分岐予測子に分岐に従う可能性を伝えることは可能ですか?
明確にするために、ここでは移植性を求めているわけではないので、特定のボックスに結び付けるソリューションは問題ありません。
基本的に、99% の確率で true と評価される if ステートメントがあり、最後の 1 クロックのパフォーマンスを引き出しようとしています。何らかのコンパイラ コマンドを発行できますか (GCC 4.1.2 と x86 ISA を使用する場合、重要) 分岐予測子に、その分岐をキャッシュする必要があることを伝えますか?
php - MySQL SELECTS のオーバーヘッド - 1 つまたは複数を順番に使用することをお勧めします
SELECT foo, bar, FROM users
1 つのクエリで 500 行を返す場合と、500 のSELECT foo, bar, FROM users WHERE id = x
クエリを一度に返す場合とで、パフォーマンスにかなりの違いはありますか?
私が書いている PHP アプリケーションでは、約 500 の SELECT ステートメントを生成する明確で読みやすいコード セクションのどちらかを選択しようとしています。または、500 行を返す SELECT を 1 つだけ使用する、あいまいで複雑な方法で it を記述します。
私は明確で保守しやすいコードを使用する方法を好みますが、各 SELECT の接続オーバーヘッドがパフォーマンスの問題を引き起こすことを懸念しています。
関連する場合の背景情報: 1) これは、PHP でコーディングされた Drupal モジュールです 2) 問題のテーブルは、INSERT と UPDATE をほとんど取得せず、めったにロックされません質問
ありがとう!
perl - Perl でファイルを 1 行ずつ読み込んでいる間、メモリを積極的に解放する必要がありますか?
ファイルを 1 行ずつ読み込んでいる間、メモリを積極的に解放する必要がありますか? 例:
$line 変数を「未定義」にすることは、メモリ消費を削減するための良いオプションですか?
php - PHP:配列の最後の項目を取得するための最も速くて簡単な方法は何ですか?
インデックス付き配列、連想配列、多次元配列のいずれであっても、配列の最後の項目を取得するための最も速くて簡単な方法は何ですか?
c - XOR 演算用の 4 バイトのワード アライメント
ワード境界でビット演算を行う利点はありますか? その際のCPUまたはメモリの最適化はありますか?
実際の問題: 2 つの構造の XOR を作成しようとしています。構造 1 と構造 2 の両方が同じサイズの 10000 バイトであるとします。最初の数百バイトはそのままにして、1 と 2 の XOR を開始します。まず 302 から開始するとします。これは一度に 4 バイトを使用し、XOR を実行します。両方の構造の 302、303、304、および 305 が XOR されます。このサイクルは 10000 まで繰り返されます。
さて、304から始めると、パフォーマンスの向上は期待できますか?
objective-c - IF、CASE、および WHILE ステートメントの違いは何ですか
私は、objective-c のすべての条件ステートメントの違いと、どれがより速くて軽いかを知りたいだけです。
python - Python if else マイクロ最適化
コードの最適化を検討する中で、Python でどちらがより高価なのか疑問に思っていました。
また
何かご意見は?2 番目の行数の削減は気に入っていますが、条件の切り替えよりも再割り当ての方がコストがかかるのではないかと思いました。