假设我们创建了一个用户函数void func().func的堆栈帧是在函数调用时分配的,只要在main等其他函数中调用它.
和printf一样吗?是否 printf的也消耗堆栈帧?
前提:堆栈帧只是许多C实现的实现细节(具体来说,它通常在x86上使用); 它既不是C标准所要求的东西(C标准不知道关于堆栈的东西),也不是所有实现都做的事情(甚至不是,它甚至可能取决于编译器标志/优化器考虑因素).
现在,库函数当然最终只是已编译到标准库中的常规函数,因此在这方面没有什么特别之处:在使用堆栈帧的实现中,每当执行函数调用时,被调用函数都会设置其堆栈框架(除非它是内联的或者它是完全无关紧要的,但通常不会像库函数那样发生printf
).
但是,没有什么可担心的 - 当函数返回时,新的堆栈帧被丢弃并且它的堆栈空间再次可用,所以你不必小心不要调用太多的函数.
归档时间: |
|
查看次数: |
683 次 |
最近记录: |