標準のメモリ割り当てをカスタム実装でグローバルに置き換える方法
スタック オーバーフローに関する以前の議論にもかかわらず、新しいメモリ割り当てをグローバルにオーバーライドする際に課題が発生する可能性があります。カスタム実装を使用して演算子を削除します。この記事では、標準演算子を効果的に置き換え、コードベース全体でカスタム メモリ マネージャーを一貫して使用できるようにする、改訂されたソリューションを提供します。
このグローバルな置き換えを実現するには、次の定義を行う別の翻訳単位 (TU) を作成する必要があります。これらの演算子。以下に例を示します。
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { // ... Your custom memory allocation logic here } void operator delete(void * p) throw() { // ... Your custom memory deallocation logic here }</code>
通常の関数とは異なり、演算子 new と演算子 delete の宣言は言語で暗黙的に定義されます。したがって、それらを宣言するために個別のヘッダー ファイルは必要ありません。ただし、STL を使用するため、
C 11 以降の機能強化
C 11 以降では、追加のオプションがあります。これらの演算子を定義するには:
ここにあります。これらの機能強化を使用した更新された演算子 new 定義の例:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { // ... Your custom memory allocation logic here }</code>
カスタム演算子定義を含む TU をコードベースにリンクすることにより、標準の new 演算子と delete 演算子をグローバルに置き換えることができます。これにより、すべてのメモリ割り当てと割り当て解除の呼び出しでカスタム実装が使用されるようになり、STL や他のライブラリでの演算子の混合使用に関する懸念が解決されます。
以上が標準のメモリ割り当てを C のカスタム実装にグローバルに置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。