【问题标题】:Is there any similar function to glibc mtrace() function in c++?c++ 中是否有与 glibc mtrace() 函数类似的函数?
【发布时间】:2019-12-29 14:56:46
【问题描述】:

我是一名 c 程序员,我是 c++ 新手。在 c 中,我们有 mtrace() 函数来跟踪有关分配和释放内存的信息。 是否有任何类似的功能可以做到这一点,但在 c++ 中。

【问题讨论】:

    标签: c++ memory-management memory-leaks mtrace


    【解决方案1】:

    mtrace 不是“C 语言”;它是 GLIBC 提供的实用程序,具有 C 绑定。

    如果您仍在将 GLIBC 与您的 C++ 应用程序一起使用,您可能仍然使用 mtrace(除非您有一些不使用 malloc/free 的自定义分配器,但那任何检漏仪都会有问题)。

    但是,Valgrind 更适合此任务。它功能更加丰富和进化。例如,mtrace only works on single-threaded programsmtrace 提供给您的信息也有限,而 Valgrind(与其他一些工具结合使用)can be a real force of nature

    【讨论】:

    • 我同意是 mt-unsave 并且在问题中我说的是 glibc 函数。
    • @Masalkhi "在 c 中我们有 mtrace() 函数" ;)
    • 哈哈,所以c++标准库中没有类似的new和delete函数吗?我需要一个函数而不是一个工具
    • @Masalkhi newdelete 默认使用 mallocfree 配合。 new 和 delete 不是分配函数。它们不是 malloc/free 的“C++ 版本”
    • 哦,好吧,太棒了,如果他们默认使用 malloc 和 free,那么我可以在 c++ 代码中使用 mallopt() 和 mcheck() 函数,对吧?
    【解决方案2】:

    mtrace() 在 C++ 中也可以工作,但在 C++ 中,它几乎总是返回代码中调用 newdelete 的地址,没有更多信息来自例如堆栈,这使得轻松识别问题的能力有限。

    【讨论】:

      【解决方案3】:

      C++ 内存管理只是 C 之上的一堆语言特性。
      我不是 valgrind 的粉丝,它太慢了。
      我会推荐ASAN。它内置在 GCC/Clang 中,有很多选项可供使用。

      【讨论】:

        猜你喜欢
        • 2017-05-29
        • 2011-08-20
        • 1970-01-01
        • 2019-10-21
        • 2016-06-29
        • 2013-12-11
        • 2013-05-03
        • 2011-08-01
        • 2014-06-14
        相关资源
        最近更新 更多