- 主题:主程序申请的资源是否应该在dll里面释放?
每个文件模块(指的是dll/exe)有自己的CRT heap,必须释放到对应的heap中,否则就是heap corruption。
所以如果是malloc/free、new/delete的话,必须由原模块来释放。
如果是VirtualAlloc这种,那就随便谁来释放了,反正是进程内的dll/exe共享的。
--
FROM 125.35.123.*
笔误了,是cross module boundary
静态链接到CRT、动态链接到CRT,也有区分。
https://devblogs.microsoft.com/oldnewthing/20060915-04/?p=29723
【 在 ziqin 的大作中提到: 】
: 在windows下会死, 跨进程边界了
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
各自静态链接到CRT的不行
new/malloc在最后都会走到下面这句。每个静态链接到CRT的,会有不同的heap句柄__acrt_heap。
void* const block = HeapAlloc(__acrt_heap, 0, actual_size);
C:\Program Files (x86)\Windows Kits\10\Source\10.0.22000.0\ucrt\heap\malloc.cpp
【 在 iwantfly 的大作中提到: 】
: new delete只要是同一编译器版本relase/debug, 不同模块释放没啥问题
:
--
FROM 125.35.123.*