アプリにはパフォーマンスとメモリの厳しい制約があるため、コーディング標準ではデフォルト ヒープの使用が禁止されています。つまり、 no malloc
、 no default ですnew
。すべてのメモリ割り当ては、いくつかの特定のアロケーターの 1 つを選択する必要があります。何かのようなもの
// declared globally
void* operator new( size_t size, CustomAllocHeap* heap, const char* perpetrator_name )
{
return heap->Allocate( size, perpetrator_name );
}
// imagine a bunch of CustomAllocHeap's declared globally or statically, thus
Vector* v = new( gPhysicsHeap, __FUNCTION__ ) Vector( 1.0f, 2.0f, 3.0f, 4.0f );
// or in a class
Thingy* p = new( this->LocalArenaHeap, __FUNCTION__ ) Thingy();
私たちのコードではこれについて適切な規律を維持してきましたが、一部の標準 C++ コンポーネント (コンテナーstd::function
) は密かに既定のnew
ヒープを呼び出しますが、これは非常に悪いことです。
なんらかの方法でデフォルトを完全に無効にすることをお勧めしますnew
。これにより、暗黙的にデフォルトの割り当てが発生するコード行がすぐにコンパイラ エラーをスローします。そうすれば、これらのことにすぐに気付くことができます。
明らかに実行時エラーをスローすることができますnew
。
void* operator new ( size_t ) { __debugbreak(); return NULL; }
ただし、コンパイル時にこれに関する警告を取得する方がはるかに優れています。それは可能ですか?
私たちのアプリは、固定プラットフォーム (Visual Studio を使用した x64) 用に構築されています。携帯性は申し分ありません。