COM 内存分配和释放
2022-02-17
66
0
于动态内存的申请和释放,一定要遵守“谁申请,谁释放”的原则。
为解决这个问题,COM函数内部根据实际需要动态申请内存,而调用者负责释放。虽违背了上述原则,但COM从方便性和效率出发,确实是这么设计的。
C语言 | C++语言 | Win32平台 | COM | IMalloc接口 | BSTR | |
---|---|---|---|---|---|---|
申请 | malloc | new | GlobalAlloc | CoTaskMemAlloc | Alloc | SysAllocString |
重新申请 | realloc | GlobalReAlloc | CoTaskMemRealloc | Realloc | SysReAllocString | |
释放 | free | delete | GlobalFree | CoTaskMemFree | Free | SysFreeString |
以上函数必须配对使用(如:new申请的内存,必须用delete释放)。
在COM内部,可使用任何类型的内存分配释放函数,但组件如果需要与客户进行内存的交互,则必须使用上表中的后三类函数族。
IMalloc接口是对 CoTaskXXX函数族的一个包装,并增强了一些功能,如:IMalloc::GetSize可取得尺寸,IMallocSpy可监视内存的使用;