c语言编译bss和data,bss段和data段的区别

本文介绍了C语言程序的bss段和data段的区别,bss段存放未初始化全局变量,数据段存储已初始化全局变量。在程序编译后,.exe文件大小的差异源于此。bss段不占用文件空间,由操作系统初始化,而data段需要占用空间,且包含初始化的全局变量。
摘要由CSDN通过智能技术生成

一般情况下,一个程序本质上都是由 bss段、data段、text段三个组成的——本概念是当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。

在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零(bss段属于静态内存分配,即程序一开始就将其清零了)。

比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss段中。

l          text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;

l          而bss段不在可执行文件中,由系统初始化。

编译两个小程序如下:

程序1:

int ar[30000];

void main()

{

......

}

程序2:

int ar[300000] =  {1, 2, 3, 4, 5, 6 };

void main()

{

......

}

发现程序2编译之后所得的.exe文件比程序1的要大得多。 为什么?

区别很明显,一个位于.bss段,而另一个位于.data段,两者的区别在于:

l          全局的未初始化变量存在于.bss段中&

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在计算机系统中,程序(Program Segment)是指编译器在编译程序时将程序中的所有元素分成的一些组成部分,其中包括代码、数据bss。代码是程序中的可执行部分,即函数堆叠组成的部分。数据是程序中的数据,包括全局变量。而bss是用来存放未初始化的全局变量的一块内存区域,通常被初始化为0。\[1\] 在这些中,数据(.data)用来存放显示初始化为非零的全局变量,而bss用来存放显式初始化为0或者未显式初始化的全局变量(C语言规定未显式初始化的全局变量值默认为0)。\[1\] 关于pcb程序data的具体区别,根据提供的引用内容,没有明确的信息可以回答这个问题。请提供更多相关的信息或引用内容,以便我能够给出更准确的答案。 #### 引用[.reference_title] - *1* [三种内存来源:栈(stack)、堆(heap)、数据区(.data)、bss](https://blog.csdn.net/weixin_45623808/article/details/107851457)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [(深入理解计算机系统) bssdata、text、堆(heap)和栈(stack)](https://blog.csdn.net/yuhoujiangnan2011/article/details/123467996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值