我的进程被链接到多个库,导致内存泄漏。内存泄漏来自其中一个库。我正在试图了解是否有一种方法来识别从驻留在这些库中的函数中分配的内存。每个库所使用的大小?
内存分配器是否遵循任何特定的方式,同时根据调用malloc的位置进行分配。比如,如果从Lib A调用它,那么分配将从0xA开始,对于lib B,0xB等等。
基本上,我想看看是否有办法识别泄漏的库和泄漏的内存,并将其转储。
发布于 2015-01-28 16:09:00
如果没有外部工具的帮助,这会有点困难。您必须意识到,没有什么比“量规”更能告诉您的进程实际使用了多少内存,以及哪个库函数分配了该内存。这主要与两件事有关:
malloc()和free()这样的功能的。这些函数封装了操作系统的内存分配/取消分配(实际上,映射和取消映射)功能;这允许您以不按页面大小的倍数(通常为4kB)的单位分配和释放内存。然而,这也意味着您不能真正依赖您的操作系统来告诉您,您的进程实际使用了多少内存,有多少内存已被正确清理,以及有多少内存正在泄漏。因此,您需要一些机制来处理libc和操作系统,这样您就可以检查进程在内部做什么了。一个典型的工具是瓦兰。它并不太复杂,所以我鼓励你试一试。
https://stackoverflow.com/questions/28196760
复制相似问题