Извините за общее название, но я не знаю, как лучше уточнить.
Я пишу программу на C ++ для MacOS 10.8.3. Я попытался проанализировать наличие утечек памяти с помощью инструментов Apple, и вот результаты
К сожалению (на самом деле не знаю, почему) в дереве вызовов нет записей, поэтому я не смог понять, какой вызов ответственен за утечку.
Однако 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"
и так далее. Очевидно, что в моем коде нет ни одной из этих строк.
Я широко использую pthreads для ускорения вычислений. Могут ли эти утечки быть вызваны некоторыми ошибками в моем использовании pthreads или причина в чем-то другом? На самом деле меня удивляет то, что утечки (относительно) малы, в то время как, если бы в моем коде была ошибка проектирования, я бы ожидал гораздо больших утечек (код работает некоторое время, и я создаю и уничтожаю сотни — если нет тысячи — ниток).
При необходимости я могу показать части своего кода (хотя проект не очень большой, он, безусловно, слишком большой, чтобы разместить его здесь).
Любое предложение приветствуется.
Я не знаю много об инструментах. Ты можешь попробовать Valgrind, это очень полезно для обнаружения утечки памяти.
Других решений пока нет …