内存管理-关于DLL内存释放的问题
dll中有一个比较复杂的函数process,里面申请了较大的内存空间,而这个函数是封装在dll中,现在主程序通过多线程的方式调用这个函数,当主程序强制终止子线程时,函数process中申请的空间会造成内存泄露吗,在dll中分配的空间何时会自动回收?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
强制退出会导致内存泄露,动态分配的内存需要程序自动来处理。为避免内存泄露,可做以下两方面的处理:
1.在主线程中设置标志或事件,子线程中发现标志或事件后,做释放资源和内存的操作;
2.在DllMain中增加清理内存的操作,这样dll在卸载的时候会自动调用DllMain,进而进行善后处理工作;
看问题:
@在Dll中malloc的内存在exe中释放会出错
@初始化vector并传引用到DLL中,DLL中为该引用添加节点,vector内存释放时会报堆栈错误,想搞明白原因
如果在dll中动态申请内存,应该是不会释放的,会发生内存泄露,没有自动回收的说法,除非在应用程序退出的时候这部分存储才会被回收。
强制终止子线程不可取。
1: 可以考虑主线程设置标志位或者发送终止消息给子线程,子线程做适当清理后退出。
2: 复杂的process独立为一个进程存在,终止进程之后存储会被回收,这样安全一点。