内存管理-关于DLL内存释放的问题

内存管理-关于DLL内存释放的问题

灵芸 发布于 2017-01-09 字数 232 浏览 1288 回复 2

dll中有一个比较复杂的函数process,里面申请了较大的内存空间,而这个函数是封装在dll中,现在主程序通过多线程的方式调用这个函数,当主程序强制终止子线程时,函数process中申请的空间会造成内存泄露吗,在dll中分配的空间何时会自动回收?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚风撩人 2017-06-15 2 楼

强制退出会导致内存泄露,动态分配的内存需要程序自动来处理。为避免内存泄露,可做以下两方面的处理:
1.在主线程中设置标志或事件,子线程中发现标志或事件后,做释放资源和内存的操作;
2.在DllMain中增加清理内存的操作,这样dll在卸载的时候会自动调用DllMain,进而进行善后处理工作;

灵芸 2017-04-11 1 楼

看问题:
@在Dll中malloc的内存在exe中释放会出错
@初始化vector并传引用到DLL中,DLL中为该引用添加节点,vector内存释放时会报堆栈错误,想搞明白原因

如果在dll中动态申请内存,应该是不会释放的,会发生内存泄露,没有自动回收的说法,除非在应用程序退出的时候这部分存储才会被回收。

强制终止子线程不可取。
1: 可以考虑主线程设置标志位或者发送终止消息给子线程,子线程做适当清理后退出。
2: 复杂的process独立为一个进程存在,终止进程之后存储会被回收,这样安全一点。