main() 总是在堆栈上吗?

Is main() always on the stack?

本文关键字:堆栈 main      更新时间:2023-10-16

堆栈上是否有 main(( 的永久激活记录?这意味着在程序终止之前,它永远不会从堆栈中弹出。

我想如果main((总是坐在堆栈的底部直到程序终止,那么堆栈将为main((提供一个特殊的位置。就像静态变量和全局变量在堆栈上有自己的空间一样。

但我离题了。

我只是好奇 main(( 是否总是在堆栈上。它似乎是合乎逻辑的,当它被弹出时;触发程序执行。但我仍然很好奇,也许它比这更有趣。

C++语言没有指定"堆栈"之类的东西(除了std::stack容器(。不一定在每个语言实现上都有这样的东西。因此,无法保证main"在堆栈上"(无论您的意思是什么(。

如果我们看一下特定的语言实现,例如Linux上的GCC,您会发现main实际上甚至不是第一个要运行的函数。默认入口点是一个名为_start的函数,它在调用之前执行初始化__libc_start_main在调用main之前执行更多初始化。在此实现中,main的参数和局部变量的分配以及从中返回的参数和变量可以采用与任何其他函数相同的方式完成。

main是一个函数,就像其他函数一样。 初始化完成后,从运行时库调用它,当main返回时,运行时库终止程序。

因此,堆栈上是main声明的任何局部变量,以及执行完成main(或遇到return语句(时要返回的返回地址。