gpt4 book ai didi

c++ - 如何调试高内存消耗

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:33 26 4
gpt4 key购买 nike

我写了一个程序,它使用 OpenCV 持久化模块来读取 .xml.gz 文件。我使用一个类来管理这些数据。在构造函数中,它使用cv::FileStorage 读取所有数据。所有数据都在成员变量中,它们是 std::vectorcv::Mat。类的每个实例之间没有静态成员或任何共享内容。

奇怪的是。如果我只使用我的类的一个实例,程序将消耗大约 50MB 的内存。但是,如果我使用两个实例,它将消耗大约 600MB。如果我使用三个,它将消耗大约 650MB。如果我使用四个,它会消耗大约 700MB ...只有一个实例和多个实例之间似乎有一条奇怪的界线。

我做了一些实验,结果如下:

  1. 此问题只发生在 Linux(Ubuntu 14.04、OpenCV 3.0)上,不会发生在 Windows 上。
  2. 我用valgrind检查,程序没有内存泄漏。

这是这个类的代码:https://github.com/delphifirst/FaceX/blob/master/FaceX/face_x.cpp

指出我代码中的问题或给我一些调试此类问题的建议都会非常有帮助。

编辑:我按照评论中的建议,使用 top -p 而不是 gnome-system-monitor 来检查内存消耗。结果是:VIRT: 1003552, RES: 693228, SHR: 8440, %MEM: 33.8 (电脑总共2GB内存)

编辑2:我用tcmalloc代替了g++的内存分配器,然后问题就莫名其妙的消失了。

最佳答案

您可以链接到 tcmalloc(一个内存分配库,它将取代您程序中通常的内存分配例程)并使用其堆分析器。堆分析器会告诉您内存消耗的来源(即程序中的哪些函数正在分配所有内存)。这应该为您提供进一步调试的良好起点。

关于c++ - 如何调试高内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611741/

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