【发布时间】: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