程序的内存使用量随着时间的推移而增加,但内存泄漏工具报告没有问题
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;
您很可能患有内存碎片。
发生的情况是,当您释放内存块时,您会遇到一些小孔,下次请求内存时可能无法使用。 当您继续以创建小不可用孔的模式进行分配和释放时,唯一的解决方案是从系统中获取更多内存。
如果您对程序如何将内存用于特定事项有明确定义的规则,则可能需要考虑使用内存池来帮助根据程序的特定要求分配和释放内存,而不是标准库的通用要求。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏