8

パフォーマンスに敏感なアプリケーションのためにグローバル演算子 new と delete をオーバーロードしようとしています。http://www.informit.com/articles/article.aspx?p=30642&seqNum=3で説明されている問題と、Intel TBB のアロケーターhttp://www.intel.com/technology/itj/を使用するための推奨事項を読みました。 2007/v11i4/5-foundations/5-memory.htm

初めて new と delete をオーバーロードするので、いくつか質問があります。

「新しい」呼び出しを含むすべてのファイルに、オーバーロードされた新しい関数を含む新しいヘッダー Allocator.h (または Pre.h) を含める必要がありますか? これは面倒です。

それとも、Allocator.h (前) を各翻訳単位にインクルードする "gcc -include Allocator.h ..." を使用する必要がありますか? コード プラットフォームを可能な限り独立させたいと考えています。すべてのコンパイラが「gcc -include」に類似したものをサポートしていますか?

4

2 に答える 2

14

operator newグローバルandをオーバーロードしたい場合はoperator delete、それを実装するだけです。言語の一部として既に定義されているため、どこでも明示的に定義する必要はありません。

編集:異なるパラメーターを取る演算子 new を定義する場合は、どこにでも #include する必要があります。ただし、それはあなた次第です。それは主にスタイルの問題です。

そして、グローバル演算子 new と delete のすべてのバリアントを実装することを忘れないでください: newnew[]deletedelete[]、およびstd::nothrowバリアント。

于 2009-03-12T17:40:22.607 に答える
2

Visual Studio を使用していて、プリコンパイル済みヘッダーを使用している場合は、そこにインクルードをスローできます。gcc には何らかの形式のプリコンパイル ヘッダーもあると思います。これにより、コンパイル時間も改善されます。

于 2009-03-12T17:41:03.027 に答える