计算机系统篇之链接(10):.bss、.data 和 .rodata section 之间的区别

本文探讨了计算机系统中链接过程中.bss、.data和.rodata段的不同。.bss段用于未初始化的全局和静态变量,不占用目标文件空间;.data段存放已初始化且非零值的变量;.rodata段则包含常量数据。C++程序中的const修饰变量会存储在.rodata段,其他根据初始化状态和值决定存放位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机系统篇之链接(10):.bss、.data 和 .rodata section 之间的区别

Author:stormQ

Friday, 08. May 2020 10:20PM


Section 名称 区别1:用途不同 区别2:在目标文件中占用的空间不同
.rodata 用于维护只读数据,比如:常量字符串、带 const 修饰的全局变量和静态变量等 在目标文件中占用空间
.data 用于维护初始化的且初始值非0的全局变量和静态变量(不带 const 修饰) 在目标文件中占用空间
.bss 用于维护未初始化的或初始值为0的全局变量和静态变量(不带 const 修饰) 不占用目标文件的空间

注:

  • 对于未初始化的全局变量和静态变量的初始值在运行期会被赋为0。从而,达到 .bss section 用于减少目标文件的大小的目的。

  • 临时变量(即局部非静态变量)既不出现在.data中,也不出现在.bss中。它由运行期栈维护。

  • 严格地讲,gcc 将 C 程序(以 .c 结尾的源文件)中的未初始化的全局变量标记为COMMON<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值