c-将malloc重写为日志分配大小



我正试图使用一点代码在tcpdump中为我的一个项目记录mallocs,因此我使用的代码是:

#include <stdlib.h>

unsigned int memCount = 0;
void *my_malloc(size_t size) {
void *p = malloc(size);
memCount = memCount + size;
printf("Memory Allocated :%u n", size
return p;
}
#define malloc(size) my_malloc(size)

在网上查看了许多类似的问题后,这似乎应该有效,但我的自定义malloc似乎没有被调用。任何帮助都将不胜感激,谢谢!

您必须再次#define每个源文件中的malloc宏-因此,通过在定义宏的地方包含一个头文件来实现这一点。

您的问题是,当您期望调用真正的malloc时,my_malloc会调用malloc#define。原因是预处理器还将其中的malloc转换为my_malloc

如果我们简单地预处理以下内容:

#define malloc(size) my_malloc(size)
unsigned int memCount = 0;
void *my_malloc(size_t size) {
  void *p = malloc(size);
  memCount = memCount + size;
  printf("Memory Allocated :%zu n", size);
  return p;
}
int main(void) {
  malloc(123);
  return EXIT_SUCCESS;
}

你会得到:

unsigned int memCount = 0;
void *my_malloc(size_t size) {
  void *p = my_malloc(size);
  memCount = memCount + size;
  printf("Memory Allocated :%zu n", size);
  return p;
}
int main(void) {
  my_malloc(123);
  return 0;
}

您需要访问真正的malloc,这里演示了它。

应该这样做,你可能没有让define对你实际使用malloc的文件可见。把它放在一个公共的头中,所有实现文件都包含这个头。

EDIT:如果问题是函数正在调用自己,则应将define移到函数声明之后。

相关内容

  • 没有找到相关文章

最新更新