C 中的哪些 print 调用不会在幕后调用 malloc() ?

Gab*_*les 2 c printing printf

我正在实施我自己的fast_malloc()来替换malloc(). 我需要在里面调试打印。是否有任何打印调用保证永远不会调用malloc(),或者我是否需要创建自己的安全版本?

以前,我不小心通过调用导致了无限递归malloc()printf()然后调用malloc(),然后调用printf()...永远。

如果我需要创建自己的安全版本,在后台使用固定大小的静态数组作为要格式化的缓冲区,这就是我需要知道的。我能做到。

puts()或者怎么样putc()?他们应该很安全,不是吗?

我使用的是 Linux Ubuntu 20.04。理想情况下,我所做的一切都将是跨平台兼容的,但我想如果需要低级系统调用,我可以自定义。


有关的:

  1. 相关,但不重复,因为它特定于snprintf()调用 malloc 的 snprintf 或不调用 malloc 的 snprintf
  2. fprintf 在幕后使用 malloc() 吗?

Emp*_*ian 6

是否有任何打印调用保证永远不会调用 malloc()

一般情况下可以打电话fprintf(stderr, ...)。这是因为stderr默认情况下是无缓冲的。

但是,这可能无法在malloc进程生命周期的早期、其余部分libc自行初始化之前起作用。

你最好的选择是使用write(2).