我正在进行一些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)
现在,这段代码将用于守护进程,该进程本应全天候运行,因此我希望避免无法控制的内存增长。
现在有没有人使用libblkid?如何解决这个内存问题? (在极端情况下,我可以free()
它......但它会影响系统稳定性吗?)
答案 0 :(得分:1)
您使用的是blkid_put_cache()
吗?
对于libblkid的自述文件:
如果您调用了blkid_get_cache(),则应该调用 使用blkid库函数完成blkid_put_cache()。 如果您已写入,这将保存缓存到blkid.tab文件 访问该文件。它还将释放所有相关设备和 标记:
blkid_put_cache(高速缓冲存储器);