是否有libc函数(或等效函数)来了解堆的当前大小?
我的应用程序中存在内存问题,并且当我想要帮助我找到问题时,它似乎能够监视堆。那么有没有办法知道堆的当前大小?
答案 0 :(得分:4)
没有
由于您需要的功能是用于调试,因此使用调试器或操作系统的资源记帐监视进程的内存使用情况会更有意义,而不是尝试将其编码到程序中。
如果确实希望您的程序跟踪自己的内存使用情况,唯一可行的方法是避免直接使用malloc
和free
而是通过递增/递减计数器的包装器来调用它们。这不会考虑内存碎片,但如果您对程序的逻辑内存使用感兴趣而不是对物理资源的影响,那么以这种方式实现的计数器实际上可能提供更多信息而不是查看操作系统的资源会计。
如果您只关心特定的目标平台或平台系列,那么可能还有超出C标准的功能可以满足您的需求。在POSIX上,查找getrusage
。
答案 1 :(得分:2)
您需要的是http://valgrind.org/
答案 2 :(得分:0)
仍然无济于事。
你想知道吗:
总地址空间
用户程序可用的空间
空间未分配,这个过程包括交换或不交换
最大的免费大块
等
答案 3 :(得分:0)
您可以使用Purify等工具来调试内存问题。 This article from IBM包含有关此类问题的来源和解决方案指南的大量详细信息。