C语言程序段的定义、实际应用分析

本文详细介绍了程序段的概念,包括先天段(代码段、数据段、bss段)和自定义段,并强调了自定义段在组织代码和提升效率上的优势。链接脚本在程序链接过程中的作用是根据规则整合不同段属性的代码。此外,解释了C语言中未初始化全局变量默认为零的原因,以及如何确保初始化为非零的全局变量在main执行前被正确处理。自定义段在内核启动过程中的应用,如CPU型号确认、参数校验和机器码确定,进一步展示了其重要性。
摘要由CSDN通过智能技术生成

1、程序段的概念

程序段就是将你写的代码分成不同的段,拥有相同段属性的代码链接时会被链接在一起。将来程序在内存中运行时,相同段属性的代码就会加载在连续的地址中。如果你不指定代码的段属性,编译器就会按照默认的规则对代码进行程序段的划分,所以写应用程序的程序员不用关心程序段,反正编译器会自动划分程序段。程序段分为先天段和自定义段。
先天段:就是每个程序都会有的基础段属性,你不用指定编译器也会自动划分,包括代码段、数据段、bss段
自定义段:就要靠自己主动去指定代码的段属性。

2、链接脚本

上面已经将代码赋予了不同的段属性,相当于对代码进行了分类。在链接的时候就需要将不同段属性的代码链接成一个可执行程序,这就涉及到链接规则,怎么合理
的将代码组织起来,比如:哪些段放在前面,哪些段放在后面,相同段属性的代码要放在一起······。链接脚本就是指定链接规则,让编译器知道怎么组织代码。
《嵌入式开发(S5PV210)——u-boot的链接脚本分析》《内核(kernel)的链接脚本》

3、程序段的组成

代码段(.text):又叫文本段,代码段其实就是你写的那些函数和头文件;
数据段(.data):初始化为非零的全局变量;
bss段(.bss):未初始化或者初始化为零的全局变量;bss段在加载到内存时,整个段都会被清零。
自定义段:在写代码时自己指定段属性;

4、自定义段的好处

自定义段就是你主动将某些代码赋予特有的段属性,将来在链接的时候,具有相同段属性的代码会被链接在一起。简单来说,就是你想把某些代码链接的时候挨着放在一起,就可以把那些特有的段属性。我的理解,自定义段的好处就是既有数组按下标访问的优势,也有链表方便扩展的优势。因为你将代码赋予相同的段属性,将来这些代码都被链接在一块,所有你可以向数组一样去访问这些代码;又因为自定义段并没有限制一个段的代码数量,你想指定多少代码为同一个段属性都可以,所以又具有链表的扩展性。

5、自定义段的应用

《内核启动过程中对CPU型号的确认》《内核中对uboot传参tags的校验》《内核启动过程中机器码的确定》

6、为什么C语言中未初始化的全局变量默认值是零?

因为C语言把未显式初始化的全局变量放在了bss段,所以能够保证其值为0。

7、 如何保证显式初始化为非0的全局变量在main之前就被赋值了?

因为它把这类变量放在了.data段 中,而.data段会在main执行之前被处理(初始化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值