【问题标题】:Override global new/delete and malloc/free with tcmalloc library使用 tcmalloc 库覆盖全局 new/delete 和 malloc/free
【发布时间】:2015-04-18 19:30:13
【问题描述】:

我想覆盖 new/delete 和 malloc/free。我的应用程序中链接了 tcmalloc 库。我的目标是添加统计数据。

从新开始,我正在调用 malloc。下面是一个全局示例。

void* my_malloc(size_t size, const char *file, int line, const char *func)
{
    void *p = malloc(size);
....
....
....
    return p;
}

#define malloc(X) my_malloc(X, __FILE__, __LINE__, __FUNCTION__)

void *
operator new(size_t size)
{
    auto new_addr = malloc(size);
....
...
    return new_addr;
}

新建/删除覆盖工作正常。

我的问题是我直接使用 malloc 的其他文件会发生什么,例如

first.cpp
malloc(sizeof(..))

second.cpp
malloc(sizeof(..))

这个 malloc 调用如何解释为我的宏不在头文件中。

【问题讨论】:

  • @iharob 你能给我举个例子吗。
  • 为什么要这么早定义宏?
  • @MarcGlisse 现在可以正常工作了。但是一个问题发生在我使用 malloc 的其他文件上?问题已更新。
  • 您需要在要隐藏默认实现的每个文件中包含您的预处理器宏以及您的函数。并确保使用包括警卫。但是,您尝试这样做有什么特别的原因吗?你听说过valgrind吗?
  • @FranciscoAguilera 是的,我对 valgrind 知之甚少,但从未使用过。

标签: c++ malloc new-operator tcmalloc


【解决方案1】:

tcmalloc 提供了新的/删除的钩子,可用于实现任何类型的内存使用跟踪/记帐。参见例如AddNewHook in https://github.com/gperftools/gperftools/blob/master/src/gperftools/malloc_hook.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多