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 可调用包装器)将使用本机堆)。

于 2012-10-22T13:31:27.723 回答
0

堆用于存储动态内存,因此从 DLL 请求的内存将被加载到堆中。但是,我相信对 DLL 中函数的调用仍将使用堆栈空间来执行。

于 2012-10-22T13:38:40.390 回答