c - C 中的哪些打印调用不会在后台调用 malloc()?
问题描述
我正在实施自己fast_malloc()
的替换malloc()
. 我需要在里面调试打印。是否有任何保证永远不会调用的打印调用malloc()
,或者我是否需要创建自己的安全版本?
以前,我通过调用我的malloc()
call printf()
,然后调用malloc()
,然后调用printf()
...forever 意外地导致了无限递归。
如果我需要创建自己的安全版本,该版本在后台使用固定大小的静态数组作为要格式化的缓冲区,这就是我需要知道的全部内容。我能做到。
puts()
或者怎么样putc()
?他们应该是安全的,不是吗?
我在 Linux Ubuntu 20.04 上。理想情况下,无论我做什么都将是跨平台兼容的,但我想如果我需要低级系统调用,我可以自定义。
有关的:
- 相关,但不重复,因为它特定于
snprintf()
:调用 malloc 的 snprintf,或不调用 malloc 的 snprintf - fprintf 在后台使用 malloc() 吗?
解决方案
是否有任何保证不会调用 malloc() 的打印调用
通常您可以调用fprintf(stderr, ...)
. 这是因为stderr
默认情况下是无缓冲的。
malloc
但是,在进程生命周期的早期,在其余部分libc
初始化之前,这可能无法正常工作。
你最好的选择是使用write(2)
.