gpt4 book ai didi

c - 没有任何参数和返回值的 C 函数是否需要堆栈才能执行?

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:05 25 4
gpt4 key购买 nike

下面的函数是否需要任何堆栈来执行?

int a;
void func(void)
{
a = 10;
}

最佳答案

只要 C 编译器可以看到 func 的定义,它就可以1 在不使用任何堆栈空间的情况下实现 func。例如,当它看到对 func 的调用时,它可以通过发出一两条指令将 10 移动到 a 中来实现该调用。这将实现与将 func 作为子例程调用相同的结果,因此 C 规则允许 C 实现以这种方式实现对 func 的调用,并且它不使用任何堆栈空间。

一般来说,如果编译器看不到func的定义,比如在编译另一个调用func但没有定义它的源文件时,编译器将不得不发出调用指令或类似指令,至少会将返回地址压入堆栈。

此外,如果被调用的例程更复杂,编译器可能会选择不内联实现它,或者可能无法这样做。 (例如,如果 func 包含对自身的调用,编译器通常不可能在所有情况下都用内联代码实现它;编译器需要用实际的子程序调用指令来实现它,这确实使用堆栈空间。)

脚注

1 任何特定编译器是否会在不使用堆栈空间的情况下实现 func 是另一回事,这取决于编译器、用于编译的开关和其他因素。

关于c - 没有任何参数和返回值的 C 函数是否需要堆栈才能执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com