当前位置: 技术问答>linux和unix
【讨论】动态库资源释放问题
来源: 互联网 发布时间:2016-05-01
本文导语: 主线程main,后台线程back,动态库lib.so main创建back,back调用lib.so中的函数func,func调用了malloc。 问题是:当main调用pthread_cancel杀掉back时,func尚未执行free释放动态内存,那么func中malloc的内存会自动释放吗? ...
主线程main,后台线程back,动态库lib.so
main创建back,back调用lib.so中的函数func,func调用了malloc。
问题是:当main调用pthread_cancel杀掉back时,func尚未执行free释放动态内存,那么func中malloc的内存会自动释放吗?
lib.so中的全局数据存放在何处,是main的数据段,还是在其他数据段?
main创建back,back调用lib.so中的函数func,func调用了malloc。
问题是:当main调用pthread_cancel杀掉back时,func尚未执行free释放动态内存,那么func中malloc的内存会自动释放吗?
lib.so中的全局数据存放在何处,是main的数据段,还是在其他数据段?
|
是动态加载libXXX.so吗?
无论在那个线程调用func,malloc分配的内存都属在进程堆上,和平常使用没区别
进程数据段
|
不会自动释放。
|
Require explicit free, or it will cause memory leak.
|
既然是后台线程,又不是子进程,应该不用担心吧。反正主线程还能做善后处理。数据都在该进程的堆里。
|
在调用函数时,被调函数中定义的非static局部变量都在主调进程中的stack中。
可以考虑一下多个进程同时调用某个函数的情形,如果其中的非static局部变量保存在函数库中话,
很显然会出问题,so...
至于lib.so中的全局数据,我想由os管理,这时如果多个进程使用lib.so中的全局变量,就会出问题了。
个人理解