gpt4 book ai didi

c++ - 程序的内存使用量随时间增加,但内存泄漏工具报告没有问题

转载 作者:太空狗 更新时间:2023-10-29 11:42:50 25 4
gpt4 key购买 nike

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

chart of memory usage

我让它在 Linux 上运行并且 Valgrind 给它一个干净的健康证明,如果这完全相关的话。我正在使用 Linux 代码 here显示我的进程的虚拟内存消耗:

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;

最佳答案

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

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

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

关于c++ - 程序的内存使用量随时间增加,但内存泄漏工具报告没有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com