Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ realloc和calloc是否调用malloc?_C++_C_Linux_Malloc - Fatal编程技术网

C++ realloc和calloc是否调用malloc?

C++ realloc和calloc是否调用malloc?,c++,c,linux,malloc,C++,C,Linux,Malloc,这可能是一个简单的问题,但我找不到答案。malloc是否在realloc和calloc内部调用?因为我在计算malloc调用,这对我来说很有趣。谢谢您可以编写调用realloc和calloc的简单测试程序,并将其提供给callgrind(Valgrind的工具之一)。它将显示调用图,以便您可以检查malloc和calloc在libc实现中调用了哪些函数。您不应该尝试依赖于系统、库或编译器相关的机制。即使您知道realloc在一个系统/编译器/库上调用malloc,您也无法确定它在其他系统上的处理

这可能是一个简单的问题,但我找不到答案。malloc是否在realloc和calloc内部调用?因为我在计算malloc调用,这对我来说很有趣。谢谢

您可以编写调用realloc和calloc的简单测试程序,并将其提供给callgrind(Valgrind的工具之一)。它将显示调用图,以便您可以检查malloc和calloc在libc实现中调用了哪些函数。

您不应该尝试依赖于系统、库或编译器相关的机制。即使您知道realloc在一个系统/编译器/库上调用malloc,您也无法确定它在其他系统上的处理方式是否相同


在这一点上的问题是,你试图实现什么。如果需要跟踪内存使用情况,C++中有更好的方法,例如为运算符新建和删除安装全局替换。在某些版本的Linux中,您还可以向malloc添加挂钩(但从未使用过此功能)。在其他系统上,您可以使用其他机制更安全地实现所需的功能。

我们不知道语言标准。C99没有说明函数之间是否相互调用


C++只说
malloc
不能调用
new
,但对这两个函数都没有其他这样的限制。

因为您使用的是Linux,所以您可能正在使用glibc。您可以查看,并看到它从calloc等函数调用了一个名为uu malloc_hook的函数。这是一个用来截取和计算分配的方法。您可以从中获得其他有用的统计信息。但是,看看是否有一个现有的工具可以首先实现您想要的。内存管理调试和统计是一个常见的要求

你必须查看编译器的实现。你是用C还是C++编译的?许多编译器通过拥有一个内存分配函数来简化代码。code>calloc和
realloc
以及
malloc
通常会调用相同的内存分配器。但是,标准中没有规定
calloc
realloc
必须调用
malloc
。编译器可以自由地实现它们认为合适的函数,只要它们的实现符合语言标准中的规范。实际上,我正在为malloc等实现挂钩,以跟踪动态内存使用情况。你知道有更好的方法吗?嗯,如果ReLoCo调用MALLC,我需要在程序中考虑这个问题。不要编写自己的工具来跟踪动态内存使用。使用已经编写和测试过的工具。根据您想做什么,答案是:不要这样做,使用比您能够编写或使用新处理程序或编写自己的内存处理程序更好的工具,并强制所有人使用该工具。问题仍然存在:你想实现什么(即为什么需要内存跟踪),而不是如何实现。@Thomas Matthews&LiKao:我正在编写一个跟踪动态内存的程序(实际上,它只需要最大使用动态内存的准确值)并根据结果决定进一步采取哪些步骤(它应该自动监控性能)。