C++全局构造与析构底层实现

本文详细解析了C++全局变量的构造和析构过程,涉及到Glibc中的crt1.o、crti.o、crtn.o、crtbegin.o和crtend.o等文件的作用,以及如何通过.init和.finit段、.ctors段来实现全局对象的初始化和清理。GCC编译器在每个编译单元中生成特殊函数,这些函数在链接时合并成全局构造和析构的函数数组,确保在main函数前后正确执行。
摘要由CSDN通过智能技术生成

*前一阵儿,被施老师问到C++全局变量是如何构造和析构的。。。?之前看书的时候好像忽略了这个点。。现在补上。。。→_→*

理解这个点之前,需要把main函数的前世今生搞清楚。。请戳传送门

  • Glibc中的文件类型

    • 在Glibc中主要分为头文件和库文件

      • 头文件位于/usr/include

      • 库文件包含动态库和静态库

        • 动态库位于/lib/libc.so.6

        • 静态库位于/usr/lib/libc.a

    • 除了C标准库外,Glibc中还有几个辅助的“运行库”

      • /usr/lib/crt1.o 中包含程序的入口函数_start,由它负责调用__libc_start_main完成初始化,并调用main函数

      • /usr/lib/ctri.o

      • /usr/lib/ctrn.o

  • Glibc中的crti.o和crtn.o的内容和作用

    • 因为全局变量必须在main函数之前构造、必须在main函数之后析构ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值