c - printf 是否消耗 C 中的堆栈帧?

标签 c stack printf

假设我们创建了一个用户函数void func()func 的堆栈帧由函数调用分配,每当它在其他函数(例如 ma​​in)中被调用时。

它和 printf 一样吗? printf 是否也消耗栈帧?

最佳答案

前提:堆栈帧只是许多 C 实现的一个实现细节(具体来说,通常在 x86 上使用);它既不是 C 标准所要求的(C 标准对堆栈一无所知),也不是所有实现都需要的东西(甚至不是,它甚至可能取决于编译器标志/优化器的考虑)。

当然,库函数最终只是已经编译到标准库中的常规函数​​,因此在这方面没有什么特别之处:在使用堆栈帧的实现中,无论何时执行函数调用,被调用的函数集向上它的堆栈框架(除非它是内联的或者它是完全微不足道的,但这通常不会发生在像 printf 这样的库函数中)。

不过,这没什么好担心的——当函数返回时,新的栈帧被丢弃并且它的栈空间再次可用,所以你不必注意不要调用太多函数。

关于c - printf 是否消耗 C 中的堆栈帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626600/

相关文章:

c - 通过 RTSP 传输视频和音频

assembly - 后进先出栈算法设计

c - 将 C 中的变量参数传递给 printf/vsprintf

java - 创建一个 "calculator"来评估 Java 中的算术表达式 - 代码问题

c - 如何在 C 中的另一个函数中打印数组结构

c - 在循环中忽略 i 和 j 的相同值

c - 多线程tcp服务器的并发连接数

c、从头开始shrink分配的空间

c - 我自己的 realloc 函数在 c 中的实现

c++ - 继承 std::stack 会导致 clang 出错,但适用于 gcc