【问题标题】:Analyzing memory leak分析内存泄漏
【发布时间】:2013-05-24 00:38:13
【问题描述】:

对于通用标题,我很抱歉,但我不知道如何更好地澄清。

我正在 MacOS 10.8.3 上编写 C++ 程序。我尝试使用 Apple 的 Instruments 分析是否存在内存泄漏,这是结果

不幸的是(实际上不知道为什么)调用树没有显示任何条目,所以我无法理解哪个调用导致了泄漏。

但是 Instruments 显示了泄漏内存的地址,所以我打开 gdb 并将其附加到正在运行的进程中,以便分析内存的内容并获得一些关于错误的提示。这是 gdb 返回的内容

(gdb) x/s 0x7fa0f3400720
0x7fa0f3400720:  "OS_dispatch_queue_specific_queue"
(gdb) x/s 0x7fa0f34005d0
0x7fa0f34005d0:  "OS_xpc_connection"
(gdb) x/s 0x7fa0f3400640
0x7fa0f3400640:  "OS_dispatch_object"
(gdb) x/s 0x7fa0f3400660
0x7fa0f3400660:  "OS_dispatch_queue"
(gdb) x/s 0x7fa0f3400680
0x7fa0f3400680:  "OS_dispatch_source"
(gdb) x/s 0x7fa0f34006a0
0x7fa0f34006a0:  "OS_dispatch_semaphore"
(gdb) x/s 0x7fa0f34006c0
0x7fa0f34006c0:  "OS_dispatch_group"

等等。显然我的代码中没有任何这些字符串。

我正在大量使用 pthread 来加快计算速度。这些泄漏可能是由于我使用 pthread 时的一些错误造成的,还是其他原因?实际上让我感到惊讶的是泄漏(相对)很小,而如果我的代码中存在设计错误,我预计会有更大的泄漏(代码运行一段时间,我正在创建和销毁数百个 - 如果不是数千个线程)。

如果有必要,我可以展示我的部分代码(虽然项目不是很大,但肯定太大了,不能在这里发布)。

欢迎提出任何建议。

【问题讨论】:

  • 您是否有某些原因没有与 Core Foundation 建立联系?
  • 不是真的,我根本不需要它,所以没有理由链接它。

标签: c++ macos memory-leaks gdb instruments


【解决方案1】:

我对 Instruments 了解不多。你可以试试valgrind,它对检测内存泄漏非常有用。

【讨论】:

  • valgrind 实际上有两个相关的工具来解决这个问题:--memcheck 将检查内存泄漏,--helgrind 将检查竞争条件。不幸的是,我相信 --helgrind 在 Mac OS X 上不可用。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多