1.在main执行之前和之后的代码可能是什么?

codemagiciant / 2023-05-29 / 原文

main函数执⾏之前,主要就是初始化系统相关资源:

■设置栈指针:所谓设置栈,就是将栈指针指向某块内存

■初始化静态static变量和global全局变量,即.data段的内容

■将未初始化部分的全局变量赋初值:数值型shortintlong等为0boolFALSE,指针为NULL等等,即.bss段的内容

已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss段中

■全局对象初始化,在main之前调用构造函数,这是可能会执行前的一些代码

■将main函数的参数argcargv等传递给main函数,然后才真正运行main函数

__attribute__((constructor))是C/C++中的一个编译器属性,用于定义构造函数。

main函数执行之后

■全局对象的析构函数会在main函数之后执行;

■可以用 atexit 注册一个函数,它会在main 之后执行;

atexit() 函数是C/C++标准库中的一个函数,用于注册一个函数,在程序退出时自动执行。

__attribute__((destructor))

参考资料来源:

阿秀