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执行之前被处理(初始化)

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

  1. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  2. [转]关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...

    关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决 转自:http://hi.baidu.com/qinfen ...

  3. 动图图解C语言插入排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  4. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  5. c语言程序设计指针教学,C语言程序设计中指针教学要点分析

    C语言程序设计中指针教学要点分析 徐 兵 ( 广东海洋大学信息学院, 广东 湛江 524088) 1 指针知识单元构成 1.1 指针定义 在计算机内存中, 每一个存储单元(通常为 1 字节 )都有一个 ...

  6. c语言指针数组 难点总结,C语言指针与数组的难点分析.pdf

    C语言指针与数组的难点分析,c语言指针数组,c语言二维数组指针,c语言指针数组初始化,c语言函数指针数组,c语言数组与指针,c语言结构体数组指针,c语言指向数组的指针,c语言字符串数组指针,c语言数组 ...

  7. c语言math未定义,C语言中自增自减表达式的未定义行为

    摘 要:自增自减运算符是C语言的一个特色,本文通过表达式中对一个变量进行多次自增或自减运算时产生的未定义行为进行了详细介绍,望帮助大家正确使用自增自减运算符. 关键词:C:自增自减运算符:未定义行为 ...

  8. 易语言高级表格写入MYSQL_易语言数据库与高级表格思路分析.doc

    易语言数据库与高级表格思路分析 篇一:易语言数据库操作指南 易语言数据库操作指南 一.易语言操作Access数据库 前面我们已经对比分析过易语言所支持的几种常见数据库,在这几种数据库中,我们先来学习一 ...

  9. c语言菜单选择如何用字符形式,【创客天地】计算机二级C语言、VB考试详解分析...

    原标题:[创客天地]计算机二级C语言.VB考试详解分析 01 马上就要迎来计算机二级考试了,你准备好了吗?今天助手君准备了一点C语言干货,希望对即将考试的你有所帮助.(上期刚刚推了office,有需要 ...

  10. JAVA语言与C++相比优劣势分析

    JAVA语言与C++相比优劣势分析 对于JAVA语言以及C++的定义我们在这里不再叙述,接下来我们直接分析 JAVA和C++相比其中的优劣势: 优势: 1.Java比C,C++简单,学起来比C\C++ ...

最新文章

  1. 如何锁门_保安巡查时发现住户未锁门,应该怎么办?记住这九点!
  2. 打一针就可修复受损心脏,“癌症克星”CAR-T跨界疗法登上Science封面
  3. [小故事大道理] -- GoodMorning,Sir!
  4. DOM 4.1 规范成为候选推荐标准陷困境,只因巨头齐反对
  5. sun jdk 与jdk_Sun过去的世界中的JDK 11和代理
  6. mysql 5.7 pxc_mysql5.7 PXC安装记录
  7. flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...
  8. mybatis xml配置
  9. qt-5.9.7-vc14h73c81de_0
  10. 童年修复系列-SNES芯片组介绍及FPGA实现
  11. 翰文付费打印后还有水印吗_翰文进度计划编制系统去除水印中文增强版
  12. 理科生的人生感悟-02-别忘了别人的痛苦 - 丰收之歌和围墙外的稻田
  13. 方舟服务器显示网络错误,方舟生存进化提示网络错误怎么办
  14. MongoDB实验练习题
  15. 【信管1.17】信息化发展
  16. win7系统下阿里旺旺无法登陆怎么解决
  17. 常用的一些javascript小技巧 大全
  18. 项目管理(PMP)项目沟通管理
  19. 平衡二叉树(Java实现)
  20. 中兴微型计算机,超乎想象的视觉享受,中兴天机Axon 9 Pro

热门文章

  1. 电动汽车动力系统整车仿真模型,具有双向DCDC变换器实现能量反馈,带异步电机仿真,应用最大转矩电流比控制加独特的弱磁控制策略
  2. 新闻平台聚合之新浪新闻爬虫发布
  3. MySQL之数据库操作
  4. 等压线上怎么画风向_如何利用等压线图判定天气
  5. 华罗庚杯数学竞赛考试时间
  6. 钉钉日志范文100篇_钉钉工作日记(模板一)
  7. 推荐项目| 微信小程序富文本解析组件-wxParse
  8. 记一次被动的网卡升级:VMWare导致的无线网卡不能启用
  9. 重磅!2020国家科学技术奖全名单公布!
  10. 用Python学《微积分B》(Fourier级数)