C语言程序的段
C语言在编译和连接后,将生成代码段(Text)、只读数据段(ROData)和读写数据段(RWData)。在运行时,除了以上三个区域外,还包括未初始化数据段(BSS)区域和堆(Heap)区域和栈(Stack)区域。
1、代码段(code或text)
代码段由各个函数产生,函数的每一个语句将最终经过编绎和汇编生成二进制机器代码(具体生生哪种体系结构的机器代码由编译器决定)。
2、只读数据段(ROData)
只读数据段由程序中所使用的数据产生,该部分数据的'特点是在运行中不需要改变,因此编译器会将该数据段放入只读的部分中。C语言中的只读全局变量,只读局部变量,程序中使用的常量等会在编译时被放入到只读数据区。
注意:定义全局变量constchara[100]={"ABCDEFG"};将生成大小为100个字节的只读数据区,并使用“ABCDEFG”初始化。如果定义为:constchara[]={"ABCDEFG"};则根据字符串长度生成8个字节的只读数据段(还有’ ’),所以在只读数据段中,一般都需要做完全的初始化。
3、读写数据段(RWData)
读写数据段表示了在目标文件中一部分可以读也可以写的数据区,在某些场合它们又被称为已初始化数据段,这部分数据段和代码段,与只读数据段一样都属于程序中的静态区域,但具有可写性的特点。通常已初始化的全局变量和局部静态变量被放在了读写数据段,如:在函数中定义staticcharb[100]={“ABCDEFG”};读写数据区的特点是必须在程序经过初始化,如果只定义,没初始值,则不会生成读写数据区,而会定位为未初始化数据区(BSS)。如果全局变量(函数外部定义的变量)加入static修饰,这表示只能在文件内使用,而不能被其他文件使用。
4、未初始化数据段(BSS)
与读写数据段类似,它也属于静态数据区,但是该段中的数据没有经过初始化。因此它只会在目标文件中被标识,而不会真正称为目标文件中的一段,该段将会在运行时产生。未初始化数据段只在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。
-
2017计算机二级C语言精选练习题及答案
很多时候计算机等级证书是我们找工作的敲门砖,因此,计算机等级证书也是有一定的含金量的。以下是小编为大家整理的2017计算机二级C语言精选练习题及答案,希望对大家有帮助!(1)在不同网络结点的对等层之间的通信需要下列哪一项协议?A)模块接口B)对等层协议C)电信号...
-
浅谈高职C语言课程的教学分析与设计
C语言作为学院网络技术专业的人门课程,旨在通过锻炼学生的逻辑思维,墙养学生在职业岗位中实际应用的能力.目前,该专业的学生毕业后主要从事网站开发和网络管理等方面的工作,而在这些领域几乎都以C语言作为应用的开发工具.但从历年教学实践来看,教师往往付出的精力多...
-
C/C++变量在内存中的分布介绍
变量在内存地址的分布为:堆-栈-代码区-全局静态-常量数据。同一区域的各变量按声明的顺序在内存的中依次由低到高分配空间(只有未赋值的全局变量是个例外)。本文是本站小编搜索整理的关于C/C++变量在内存中的分布介绍,感兴趣的朋友一起学习吧!!想了解更多相关信息...
-
2017计算机二级C语言精选习题
多做题有助于同学们及时检测自己的学习情况。希望提供的2017计算机二级C语言精选习题,能够帮助大家巩固所学知识,为今后的学习打好基础!(1)OSI模型的'物理层负责下列哪一种功能?A)格式化报文B)为数据选择通过网络的路由C)定义连接到介质的特征D)提供远程文件访...