You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询GCC编译C程序的退出控制段及.fini_array段的作用

GCC程序退出相关段的说明

一、程序退出时最后执行的逻辑对应段

旧版GCC(比如3.3.6)里的.dtors段用来存储全局、静态对象的析构函数指针,程序退出时会依次调用这些函数。但新版GCC已弃用.dtors和.ctors这类旧段,改用**.fini_array**负责退出阶段的收尾执行,它就是现在程序退出前最后执行的用户态段逻辑。

除此之外,程序退出时还会执行这些流程:

  • 调用atexit()或on_exit()注册的函数,调用顺序与注册顺序相反
  • 执行C++全局、静态对象的析构函数(本质也是通过.fini_array触发)
  • 操作系统内核层面的进程清理(比如回收内存、关闭文件描述符,这部分不属于用户程序的段)

二、.fini_array段的具体作用

.fini_array是一个存储函数指针的数组,当程序正常退出(比如main函数返回、调用exit())时,C运行时库(crt)会遍历这个数组,依次调用其中的函数。它的核心用途包括:

  • 处理全局、静态变量的清理工作,比如C++全局对象的析构
  • 执行用__attribute__((destructor))声明的函数
  • 作为旧.dtors段的替代方案,遵循ELF标准,兼容性和灵活性更好,目前是GCC等现代编译器的标准实现

内容的提问来源于stack exchange,提问作者Vignesh SB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:47:05