是使用COM创建的对象,是将堆分配还是堆栈分配的内存?

时间:2012-10-22 12:58:10

标签: c++

在C ++中使用COM(组件对象模型)创建的对象是采用堆分配还是堆栈分配的内存?

3 个答案:

答案 0 :(得分:0)

堆。调用COM API会产生一个对象,API会为调用者提供一个句柄(这实际上对应一个指针)。一旦调用COM API返回,堆栈分配就会使句柄引用释放的内存。

答案 1 :(得分:0)

实际上,分配完全取决于组件。当您调用CoCreateInstance时,COM加载组件并调用其导出的DllGetClassObject函数以获取IClassFactory实现来实例化该类,然后调用IClassFactory :: CreateInstance,当然这是由组件实现的。是的,在C ++中它将使用堆。但是在C#或任何.NET语言中,它将使用垃圾收集堆(尽管CCW(COM Callable Wrapper)将使用本机堆)。

答案 2 :(得分:0)

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