gpt4 book ai didi

c++ - Malloc 宏重载也适用于对 malloc (C++) 的编译器调用吗?

转载 作者:行者123 更新时间:2023-11-28 05:14:34 30 4
gpt4 key购买 nike

我在网上发现多次提到以下技巧来“重载”对 `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 分配的。有办法实现吗?

最佳答案

Does it, however, also affect the implicit calls made by the compiler to malloc or only the calls made explicitly by the programmer?

仅由程序员明确进行的调用。它还会破坏任何名为 malloc 的成员函数。

Is there a way to overload it in such a way that even the automatic calls to malloc will use the modified version?

不适用于宏。

关于c++ - Malloc 宏重载也适用于对 malloc (C++) 的编译器调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918562/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com