1.在main执行之前和之后的代码可能是什么?
1.在main执行之前和之后的代码可能是什么?
main函数执⾏之前,主要就是初始化系统相关资源:
■设置栈指针:所谓设置栈,就是将栈指针指向某块内存
■初始化静态static
变量和global
全局变量,即.data
段的内容
■将未初始化部分的全局变量赋初值:数值型short
,int
,long
等为0
,bool
为FALSE
,指针为NULL
等等,即.bss
段的内容
已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss段中
■全局对象初始化,在main
之前调用构造函数,这是可能会执行前的一些代码
■将main函数的参数argc
,argv
等传递给main
函数,然后才真正运行main
函数
解析argc和argv - CodeMagicianT - 博客园 (cnblogs.com)
■__attribute__((constructor))
是C/C++中的一个编译器属性,用于定义构造函数。
在C++中,构造函数是一个特殊的成员函数,用于在对象创建时进行初始化操作。当使用new运算符创建一个对象时,会自动调用该对象的构造函数。__attribute__((constructor))属性可以用于定义自定义的构造函数,以便在使用new运算符创建对象时进行特定的初始化操作
main函数执行之后:
■全局对象的析构函数会在main函数之后执行;
■可以用 atexit
注册一个函数,它会在main 之后执行;
atexit() 函数是C/C++标准库中的一个函数,用于注册一个函数,在程序退出时自动执行。
■__attribute__((destructor))
__attribute__((destructor)) 是 C/C++ 编译器属性,用于定义一个对象的析构函数。
在 C++ 中,当使用动态内存分配(如 new 或 malloc)创建对象时,需要在程序退出时手动释放这些对象所占用的内存。如果不手动释放内存,就会出现内存泄漏的问题。为了避免这种情况,可以使用 __attribute__((destructor)) 来定义一个对象的销毁函数。
参考资料来源:
阿秀