main函数分配在哪里?

main函数分配在哪里?

当涉及进程的内存布局时,进程内的所有函数调用都会将新的堆栈帧放入堆栈中。

我不确定这对于main函数来说是否正确,因为它似乎main比作为入口点函数做更多的事情。

main在新进程初始化时,函数是否也会获得自己的堆栈帧?

如果这是特定于实现的细节,那么对典型 Linux 实现的解释将会很有用。

答案1

通常_start是入口点而不是主要点。

main只是另一个子例程,它由 调用_start。它在堆栈上获得一个堆栈帧,就像任何其他子例程一样。

然而内核并没有像你想象的那样做那么多。在main之前运行的进程中有一些代码(它_start是由C编译器生成的,但不是C程序的一部分),做了很多事情。甚至还有之前运行的代码exec(在 C 程序运行之前),例如设置stdinstdoutstderr

内核可能会用一些技巧_start,它不能像其他子例程一样运行,但它看起来像这样:内核将设置进程,就像_entry刚刚被调用一样(但事实并非如此)。如果控制权传回_startthenexit则被调用。

(我可能掩盖了一些细节,包括_entry)。

相关内容