首页 > 解决方案 > C 中的哪些打印调用不会在后台调用 malloc()?

问题描述

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

以前,我通过调用我的malloc()call printf(),然后调用malloc(),然后调用printf()...forever 意外地导致了无限递归。

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

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

我在 Linux Ubuntu 20.04 上。理想情况下,无论我做什么都将是跨平台兼容的,但我想如果我需要低级系统调用,我可以自定义。


有关的:

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

标签: cprintingprintf

解决方案


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

通常您可以调用fprintf(stderr, ...). 这是因为stderr默认情况下是无缓冲的。

malloc但是,在进程生命周期的早期,在其余部分libc初始化之前,这可能无法正常工作。

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


推荐阅读