提问人:blipblop 提问时间:3/21/2017 更新时间:3/21/2017 访问量:511
Malloc 宏重载也适用于编译器对 malloc (C++) 的调用?
Malloc macro overloading that works also for compiler calls to malloc (C++)?
问:
我在网上多次提到以下技巧来“重载”对“malloc”的调用:
void* myMalloc(const char* file, int line, size_t size)
{
return malloc(size);
}
#define malloc(X) myMalloc( __FILE__, __LINE__, (X) )
但是,它是否也影响编译器对程序员显式调用的隐式调用,或者仅影响程序员显式调用?有没有办法使它重载,甚至自动调用也会使用修改后的版本?malloc
malloc
我问是因为我尝试了以下方法,但没有成功:
#include <iostream>
#include <malloc.h>
int usedMem(0);
void* myMalloc(const char* file, int line, size_t size)
{
usedMem += size;
return malloc(size);
}
#define malloc(X) myMalloc( __FILE__, __LINE__, (X) )
int main(void)
{
int *mydata = new int[5000];
for (size_t i = 0; i < 5000; i++)
{
mydata [i] = 1;
}
std::cout << usedMem << std::endl;
return 0;
}
我的输出返回零。也就是说,内存未使用 分配。有没有办法实现这一目标?usedMem
myMalloc
答:
1赞
user253751
3/21/2017
#1
但是,它是否也影响编译器对 malloc 的隐式调用,还是仅影响程序员显式调用?
只有程序员显式发出的调用。它还将破坏任何名为 的成员函数。malloc
有没有办法使它重载,即使是对 malloc 的自动调用也会使用修改后的版本?
宏则不然。
评论
0赞
blipblop
3/21/2017
我怀疑宏是可能的。您能否大致指出还有哪些其他解决方案可以实现这一目标?我的意思是,所以我可以进行研究并开始学习/关注这些方法?谢谢!
0赞
blipblop
3/21/2017
特别是,我对可能允许我检索分配内存的函数名称的方法特别感兴趣(而不仅仅是程序员的显式调用)。malloc
0赞
MrEricSir
3/21/2017
@blipblop宏只能替换代码,而不能替换预编译的二进制文件,例如 C++ 标准库。请参阅我对原始问题的评论,以获取有关重定向调用以分配内存的建议。
评论
new
malloc()
malloc()