0

C++ コンパイル済み EXE 内で割り当てはどのように処理されますか? コードを持っていない場合、割り当てマネージャーがアプリに組み込まれているため、割り当て/割り当て解除を追跡できませんか? または、メモリ割り当てに WinAPI 呼び出しなどがありますか?

4

3 に答える 3

3

実際、メモリ割り当ての基礎は、何らかの WinAPI 呼び出し (通常はヒープ機能) です。operator newこれらは、mallocおよびその他の関連機能の背後に「隠されています」 。ヒープ関数の呼び出しを特定できるはずですが、生のヒープと実際のメモリ割り当て呼び出しの間には、おそらくいくつかの関数のレイヤーがあります。

編集: 明らかに、プログラムが C ランタイムを .DLL として使用するようにコンパイルされている場合、実際に割り当てを実行するコードは実行可能ファイルにはまったくありません - それは DLL にあります。

そしてもちろん、コードを書いたプログラマーが次のような可能性を秘めている可能性もあります。2.たとえばVirtualAllocを使用して、何らかの方法で独自のバージョンのメモリ管理を作成しました

于 2013-01-28T15:58:34.790 に答える
3

通常、両方のいくつかがあります。通常のコードは、標準ライブラリに組み込まれているヒープ マネージャーを介してメモリを割り当てます。これにより、OS からより大きなメモリ ブロックが割り当てられ、コードの残りの部分がその大きなブロックからより小さなメモリを割り当てることができます。

ヒープ マネージャーが実際にアプリケーションに含まれているかどうかは、コンパイルとリンクの方法によって異なります。DLL で標準ライブラリを使用する場合は、標準ライブラリ DLL のコードを使用します。標準ライブラリに静的にリンクされている場合、ヒープ マネージャー コードは実行可能ファイル自体にリンクされます。

于 2013-01-28T15:57:01.690 に答える
3

通常、割り当て関数はC ランタイム ライブラリによって提供されます。そのライブラリはベンダーによって作成されます。Microsoft の Visual C++ はおそらく Windows カーネル ルーチンを使用して割り当てを実装しますが、ドキュメントを確認するか、ベンダーに問い合わせてください。

于 2013-01-28T15:54:57.057 に答える