【讨论】动态库资源释放问题

dongpy 2008-12-11 04:04:36
主线程main,后台线程back,动态库lib.so

main创建back,back调用lib.so中的函数func,func调用了malloc。

问题是:当main调用pthread_cancel杀掉back时,func尚未执行free释放动态内存,那么func中malloc的内存会自动释放吗?
lib.so中的全局数据存放在何处,是main的数据段,还是在其他数据段?
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
linlan999 2008-12-14
  • 打赏
  • 举报
回复

在调用函数时,被调函数中定义的非static局部变量都在主调进程中的stack中。

可以考虑一下多个进程同时调用某个函数的情形,如果其中的非static局部变量保存在函数库中话,
很显然会出问题,so...


至于lib.so中的全局数据,我想由os管理,这时如果多个进程使用lib.so中的全局变量,就会出问题了。



个人理解
  • 打赏
  • 举报
回复
既然是后台线程,又不是子进程,应该不用担心吧。反正主线程还能做善后处理。数据都在该进程的堆里。
sourceid 2008-12-13
  • 打赏
  • 举报
回复
Require explicit free, or it will cause memory leak.
dongpy 2008-12-12
  • 打赏
  • 举报
回复
印象中,动态库应该是映射到进程的独立的段上的。
benbenxiaoluchi 2008-12-12
  • 打赏
  • 举报
回复
不会自动释放。
once_and_again 2008-12-12
  • 打赏
  • 举报
回复
是不是谁调用,谁负责?
unilgr 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 dongpy 的帖子:]
主线程main,后台线程back,动态库lib.so
main创建back,back调用lib.so中的函数func,func调用了malloc。
问题是:当main调用pthread_cancel杀掉back时,func尚未执行free释放动态内存,那么func中malloc的内存会自动释放吗?
[/Quote]
是动态加载libXXX.so吗?
无论在那个线程调用func,malloc分配的内存都属在进程堆上,和平常使用没区别

[Quote=引用楼主 dongpy 的帖子:]
lib.so中的全局数据存放在何处,是main的数据段,还是在其他数据段?
[/Quote]
进程数据段

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧