アプリの起動時、何が起こっていますか?
アプリケーションが起動すると、アロケータが初期化されます。必要に応じて、アロケーターへの最初の呼び出しでこれを行うことができます。
また、ヒープが既に作成されていることをアロケータがどのように検出するのでしょうか?
質問に従っているかどうかわかりません。このアロケーターを使用するコードによって管理されるヒープについて話している場合、ヒープを作成したときに追跡エントリを作成するため、それがわかります。他のプロセスのヒープについて話している場合、または他のアロケータによって作成されたヒープについて話している場合は、とにかくそれらのヒープを使用できないため、気にしません。
アロケーターが (アプリを閉じるときに) ヒープを作成、保存、および破棄する方法は?
通常、低レベルと高レベルのアロケーターがあります。低レベルのアロケータは、オペレーティング システムから生のメモリ チャンクを取得するだけです。正確なメカニズムはプラットフォーム固有です。高レベル アロケーターはヒープを管理し、低レベル アロケーターからヒープ構造を保持するためのメモリを取得します。
関数が呼び出されたとき、それがどのスレッド (またはどのプロセッサ) で実行されているかを調べる方法は?
スレッド固有のデータを使用するか、プラットフォーム固有の「スレッド ID の取得」関数を呼び出すことで、どのスレッドを見つけることができます。どのプロセッサについては、プラットフォーム固有であり、入手するまでに情報が古くなっている可能性があります。ほとんどのプラットフォームにはそのような機能がありますが、これは最適化 (ロックの競合を減らすため、またはキャッシュ ヒット率を向上させるため) としてのみ使用できることを覚えておいてください。重要なことに、スレッドはいつでもあるプロセッサから別のプロセッサに移動できるため、ロックをバイパスするために使用することはできません。
正直なところ、優れたパフォーマンスを提供し、プラットフォーム間で移植可能なメモリ割り当ては、実際には非常に巧妙な方法です。この分野の専門家でない場合、本番アプリケーションに必要なパフォーマンスと安定性を提供するアロケータを開発できる可能性はほとんどありません。