1

C++ で COM (コンポーネント オブジェクト モデル) を使用して作成されたオブジェクトは、ヒープ割り当てまたはスタック割り当てメモリを使用しますか?

4

3 に答える 3

0

ヒープ。COM API を呼び出すとオブジェクトが生成され、API は呼び出し元にそのハンドルを提供します (これは実際にはポインターに対応します)。スタック割り当ては、COM API への呼び出しが返されると、解放されたメモリを参照するハンドルを作成します。

于 2012-10-22T13:02:46.137 に答える
0

実際、割り当ては完全にコンポーネント次第です。CoCreateInstance を呼び出すと、COM はコンポーネントをロードし、エクスポートされた DllGetClassObject 関数を呼び出して IClassFactory 実装を取得し、クラスをインスタンス化してから、IClassFactory::CreateInstance を呼び出します。これはもちろんコンポーネントによって実装されます。はい、C++ ではヒープを使用します。ただし、C# または任意の .NET 言語では、ガベージ コレクション ヒープが使用されます (ただし、CCW (COM Callable Wrapper) はネイティブ ヒープを使用します)。

于 2012-10-22T13:31:27.723 に答える
0

ヒープは、DLL から要求されたメモリがヒープにロードされるように、動的メモリを格納するために使用されます。ただし、DLL 内の関数への呼び出しは、引き続きスタック スペースを使用して実行されると思います。

于 2012-10-22T13:38:40.390 に答える