2 qq 30069409 qq_30069409 于 2017.09.08 11:06 提问

linux下的.so问题。。。。。。。。。。。

在一个.so中分配了内存,如果这个.so中不带有释放内存的函数,在自己的代码中手动释放的时候会出错吗?

2个回答

oyljerry
oyljerry   Ds   Rxr 2017.09.08 11:09

最好不要跨模块释放内存,所以一定要so中提供释放内存的函数给调用

justin_bkdrong
justin_bkdrong   2017.09.08 12:51

要看分配内存的函数是在C的共享库中还是在C的链接库中。(一般都是动态链接的)

因为C函数库堆管理会创建链表,然后分配就是向链表增加节点,释放就是查找节点然后删除。

如果都使用共享库,那么分配的链表是共享的,因此能够找到要释放的节点,并且删除成功.

如果使用静态链接将C函数链接进去(.a 文件),那么就会导致,在可执行文件和so文件中各有一个堆管理的链表,导致在哪里分配,必须要在哪里释放。

Csdn user default icon
上传中...
上传图片
插入图片