我正在做一些linux编程,我遇到了一个情况,从blkid库的库函数泄漏一些内存…没有太多关于它的文档(https://www.kernel.org/pub/linux/utils/util-linux/v2.21/libblkid-docs/libblkid-Cache.html),所以我转向社区寻找一些解决这个问题的方法。
功能是blkid_get_cache
和valgrind报告:
==29769== 4,129 (72 direct, 4,057 indirect) bytes in 1 blocks are definitely lost in loss record 68 of 69
==29769== at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==29769== by 0x67360BB: blkid_get_cache (in /lib/x86_64-linux-gnu/libblkid.so.1.1.0)
==29769== by 0x652DBAC: gather_disk_stat() (disk_status.cpp:96)
==29769== by 0x652DD5A: execute (disk_status.cpp:124)
==29769== by 0x42599B: PluginHelper::executeClientPlugin(plugin_descriptor*) (plugin_helper.cpp:333)
==29769== by 0x432BB5: main (main.cpp:48)
现在,这段代码将在一个守护进程中使用,这个守护进程应该是24/7运行的,所以我想避免内存的不可控增长。
有人使用libblkid到现在吗?如何解决这个内存问题?(在一个极端的情况下,我可以只是free()
它…但是这会影响系统的稳定性吗?)
您是否使用blkid_put_cache()
?
对于libblkid的README:
如果你已经调用了blkid_get_cache(),你应该调用Blkid_put_cache(),当您使用完blkid库函数时。这将保存缓存到blkid。选项卡文件,如果您已经写入对文件的访问。它还将释放所有相关设备和标签:
blkid_put_cache(缓存);