假设我们创建了一个用户函数void func()。 func 的堆栈帧由函数调用分配,每当它在其他函数(例如 main)中被调用时。
它和 printf 一样吗? printf 是否也消耗栈帧?
最佳答案
前提:堆栈帧只是许多 C 实现的一个实现细节(具体来说,通常在 x86 上使用);它既不是 C 标准所要求的(C 标准对堆栈一无所知),也不是所有实现都需要的东西(甚至不是,它甚至可能取决于编译器标志/优化器的考虑)。
当然,库函数最终只是已经编译到标准库中的常规函数,因此在这方面没有什么特别之处:在使用堆栈帧的实现中,无论何时执行函数调用,被调用的函数集向上它的堆栈框架(除非它是内联的或者它是完全微不足道的,但这通常不会发生在像 printf
这样的库函数中)。
不过,这没什么好担心的——当函数返回时,新的栈帧被丢弃并且它的栈空间再次可用,所以你不必注意不要调用太多函数。
关于c - printf 是否消耗 C 中的堆栈帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626600/