【发布时间】:2019-12-29 14:56:46
【问题描述】:
我是一名 c 程序员,我是 c++ 新手。在 c 中,我们有 mtrace() 函数来跟踪有关分配和释放内存的信息。 是否有任何类似的功能可以做到这一点,但在 c++ 中。
【问题讨论】:
标签: c++ memory-management memory-leaks mtrace
我是一名 c 程序员,我是 c++ 新手。在 c 中,我们有 mtrace() 函数来跟踪有关分配和释放内存的信息。 是否有任何类似的功能可以做到这一点,但在 c++ 中。
【问题讨论】:
标签: c++ memory-management memory-leaks mtrace
mtrace 不是“C 语言”;它是 GLIBC 提供的实用程序,具有 C 绑定。
如果您仍在将 GLIBC 与您的 C++ 应用程序一起使用,您可能仍然使用 mtrace(除非您有一些不使用 malloc/free 的自定义分配器,但那任何检漏仪都会有问题)。
但是,Valgrind 更适合此任务。它功能更加丰富和进化。例如,mtrace only works on single-threaded programs。 mtrace 提供给您的信息也有限,而 Valgrind(与其他一些工具结合使用)can be a real force of nature。
【讨论】:
new 和 delete 默认使用 malloc 和 free 配合。 new 和 delete 不是分配函数。它们不是 malloc/free 的“C++ 版本”
mtrace() 在 C++ 中也可以工作,但在 C++ 中,它几乎总是返回代码中调用 new 和 delete 的地址,没有更多信息来自例如堆栈,这使得轻松识别问题的能力有限。
【讨论】:
C++ 内存管理只是 C 之上的一堆语言特性。
我不是 valgrind 的粉丝,它太慢了。
我会推荐ASAN。它内置在 GCC/Clang 中,有很多选项可供使用。
【讨论】: