我知道从C编程语言的角度来看main()
是该程序的切入点。
但是从操作系统的角度来看,__start
启动例程中的ctrt0
链接到一个程序,该程序在调用程序的main()
函数之前执行所需的任何初始化工作(如果错误,请纠正我)。
所以我们有一些属性可以用于我们的函数,其中一个是在main()之前调用的构造函数属性,谁负责调用这个函数?
__attribute__((construtor))
void foo(void)
{
puts("Constructor called by ... ?\n");
}
它将如何逐步调用堆栈?谢谢!
标记为“构造函数”的函数放在可执行文件的特殊部分中。然后,“start”函数将在调用main
之前逐个调用这些函数。
与“析构函数”函数相同,它们再次放在一个特殊的部分中,并在调用exit
或main
返回后执行的代码调用。