C语言 百分网手机站

C语言程序的段

时间:2020-10-05 18:47:28 C语言 我要投稿

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)

  与读写数据段类似,它也属于静态数据区,但是该段中的数据没有经过初始化。因此它只会在目标文件中被标识,而不会真正称为目标文件中的一段,该段将会在运行时产生。未初始化数据段只在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。


【C语言程序的段】相关文章:

1.C语言程序介绍

2.c语言链接程序

3.C语言经典程序题

4.C语言程序的存储区域

5.c语言入门的经典程序

6.C语言位段的介绍

7.C语言程序的错误和警告

8.C语言程序中函数的定义