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

发布于 2017-01-09 11:28:15 字数 131 浏览 1475 评论 2

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(2

晚风撩人 2017-06-15 18:45:55

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

灵芸 2017-04-11 03:55:30

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文