「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ のスマート ポインターには、大幅なメモリと時間のオーバーヘッドが伴いますか?

C++ のスマート ポインターには、大幅なメモリと時間のオーバーヘッドが伴いますか?

2024 年 11 月 13 日に公開
ブラウズ:739

Do Smart Pointers in C   Come with a Significant Memory and Time Overhead?

C のスマート ポインターのメモリと時間のオーバーヘッド

スマート ポインター (C 11 の std::shared_ptr や std::unique_ptr など)自動メモリ管理を提供し、所有権セマンティクスを簡素化します。ただし、一部の開発者は、従来のポインターと比較して、スマート ポインターを使用することによる潜在的なパフォーマンスへの影響について疑問に思うかもしれません。

メモリ オーバーヘッド:

std::unique_ptr がメモリ オーバーヘッドを課すのは、次の場合に限られます。重要なデリーターが提供されています。ただし、std::shared_ptr は、比較的少量であっても常に参照カウンター用の追加メモリを必要とします。

Time Overhead:

std::unique_ptr では、実行中に時間オーバーヘッドが発生します。提供されたデリータをコピーする必要がある場合、またはポインタを null として初期化する必要がある場合、および所有されているデリータを破棄するための破棄中に構築します。 object.

std::shared_ptr では、主に参照カウンタを作成する構築中、参照カウンタをデクリメントしてオブジェクトを破壊する可能性がある破棄中、および参照カウンタをインクリメントする代入中に時間オーバーヘッドが発生します。さらに、これらの増分/減分はスレッドセーフのためにアトミックであり、さらにオーバーヘッドの原因となります。

パフォーマンスへの影響:

スマートな機能はどれも含まれないことに注意することが重要です。ポインタには、一般的にポインタにとって最も頻繁に行われる操作である逆参照中に時間のオーバーヘッドがあります。

一般に、スマート ポインタに関連するオーバーヘッドは次のとおりです。は最小限であり、コードのパフォーマンスに大きな影響を与えることはありません。ただし、スマート ポインターの作成と破棄を継続的に行うと、パフォーマンスのボトルネックが発生する可能性があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3