繁体   English   中英

程序的内存使用量随时间增加,但内存泄漏工具未报告任何问题

[英]Memory usage of program increasing over time, but memory leak tools report no issues

我正在开发一个相当大的库,它在执行时不断分配和释放内存。 在过去的几周里,我一直试图保持内存消耗稳定,但它似乎随着时间的推移而增加。 我无法完全解释的行为是增加不是线性的。 进程会在一个“基线”内存级别上徘徊一段时间,然后跳转到一个新的“基线”。 随着时间的推移,跳跃需要越来越多的记忆。 因此,假设运行几个小时后,内存使用量从 512kb 跃升至 1024kb。 它可能会在一夜之间从 1024 小时变为 2048 小时。 那么下次它可能会跳到4096kb。 以下是内存使用情况的图表:

内存使用情况图

我让它在 Linux 上运行,Valgrind 为它提供了一个干净的健康清单,如果这完全相关的话。 我在这里使用 Linux 代码来显示我的进程的虚拟内存消耗:

int getValue(){ //Note: this value is in KB!
FILE* file = fopen("/proc/self/status", "r");
int result = -1;
char line[128];

while (fgets(line, 128, file) != NULL){
    if (strncmp(line, "VmSize:", 7) == 0){
        result = parseLine(line);
        break;
    }
}
fclose(file);
return result;

您很可能正在遭受内存碎片的困扰。

发生的情况是,当您释放大块内存时,会出现一些小漏洞,下次请求内存时可能无法使用这些漏洞。 当您继续以创建小的不可用漏洞的模式进行分配和释放时,唯一的解决方案是从系统中获取更多的内存。

如果您对程序如何将内存用于特定事物有明确定义的规则,您可能需要考虑使用内存池来帮助根据程序的特定要求分配和释放内存,而不是标准的通用要求图书馆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM