ポインタ操作とCPU/メモリ使用量を理解する

王林
リリース: 2024-02-08 22:20:32
転載
662 人が閲覧しました

了解指针操作和 CPU/内存使用情况

php エディタ Banana では、ポインタ操作と CPU/メモリの使用状況について説明します。プログラミングにおいて、ポインタ操作はメモリ内のデータに直接アクセスして変更できる強力なツールです。ポインターの操作を理解することで、コードのパフォーマンスをより適切に制御し、最適化することができます。さらに、CPU とメモリの使用状況を理解することも、プログラムを最適化するために非常に重要です。 CPU とメモリの使用状況を監視および分析することで、潜在的なパフォーマンスの問題を特定し、プログラムの動作効率を向上させるための適切な措置を講じることができます。この記事では、ポインタ操作と CPU/メモリ使用量に関する関連知識を詳しく紹介し、それらをよりよく理解して適用できるようにします。

質問内容

職場の同僚と、関数にポインタを渡す、またはポインタを返すのが効率的かどうかについて議論していました。

これを行うさまざまな方法をテストするために、いくつかのベンチマーク関数をまとめました。これらの関数は基本的に変数を受け取り、変換して返します。 4 つの異なる方法があります:

  1. 通常通り変数を渡し、変換結果用に新しい変数を作成し、そのコピーを返します
  2. 通常通り変数を渡し、変換結果を新しい変数を作成してメモリアドレスを返す
  3. 変数へのポインターを渡し、変換結果の新しい変数を作成し、変数のコピーを返します
  4. 変数へのポインターを渡し、何も返さずにポインターの値を変換します。
リーリー

結果は非常に驚くべきものでした。

リーリー

これを実行する前は、呼び出される関数のスコープ内に新しい変数は作成されず、メモリ アドレスのみが渡されるため、最も効率的な方法は 4 番目のテストだろうと考えていましたが、4 番目のテストが ## であるようです。 # 効率的 が最も低いものは、最も時間がかかり、最も多くのメモリを使用します。

誰かがこれを私に説明してくれますか、またはこれを説明するいくつかの良い読書リンクを提供してもらえますか?

解決策

あなたが実行したベンチマークは、あなたが尋ねた質問に対する答えではありません。囲碁の世界だけでなく、一般的にマイクロベンチマークは非常に難しいことがわかりました。

効率の問題に戻ります。通常、関数へのポインタの受け渡しはヒープにエスケープされません。通常、関数から返されたポインターはヒープにエスケープされます。通常、ここでのキーワードは です。コンパイラーがいつスタックに何かを割り当てるか、いつヒープに何かを割り当てるかを実際には知ることはできません。これは小さな問題ではありません。非常に優れた短い説明が

ここ にあります。

しかし、知りたい場合は、尋ねることができます。コンパイラーによって行われた最適化の決定を単純に出力することから始めることができます。これを行うには、

m フラグを go ツールのcompile に渡します。 リーリー

1 より大きい整数を渡すと、より詳細な出力が得られます。プログラムを最適化するために必要な答えが得られない場合は、

分析を試してください。それは記憶分析をはるかに超えています。

一般に、日常業務においては、最適化に関する単純な決定について心配する必要はありません。現実の世界では決して分からないので、「通常は…」にこだわりすぎないでください。常に正確性の最適化を第一に目指します。次に、本当に必要な場合にのみパフォーマンスを最適化し、その必要性を証明します。推測しないでください、信じないでください。また、Go は変化しているため、あるバージョンで証明したことが別のバージョンにも当てはまるとは限らないことにも注意してください。

以上がポインタ操作とCPU/メモリ使用量を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!