哪个C标准库函数在引擎盖下使用malloc

Met*_*est 9 c linux x86 memory-management

我想知道哪些C标准库函数使用mallocfree引擎盖下.它看起来好像printf会使用malloc,但当我测试一个程序时valgrind,我注意到printf调用没有分配任何内存使用malloc.怎么会?那怎么管理内存呢?

Jon*_*ler 8

通常,C99标准中可能使用的唯一例程malloc()是标准I/O函数(<stdio.h>其中文件结构和它使用的缓冲区通常被分配malloc().一些语言环境处理可能使用动态内存.所有其他例程通常不需要动态内存分配.

现在,有没有正式记录?不,我认为不是.没有全面限制'库中的功能不得使用malloc()'.(有,但是,在其他功能限制-如strtok()srand()rand()的;它们可以实现不使用,并且实现可以不使用任何的可能的指针返回到静态存储器位置中的其他功能).然而,strdup()(据报道)极其有用的功能不在标准C库中的原因之一是因为它进行了内存分配.它也并不完全清楚这是否是在程序的因素,如asprintf()vasprintf()在TR 24731-2没有使它成为C1X,但它可能是一个因素.


Oli*_*rth 5

该标准对实施AFAIK没有任何要求.

我不知道究竟是如何printf实现的,但在我的头脑中,我想不出它为什么需要动态分配内存的原因.您可以随时查看平台的来源.