c语言中的段和内存四区

根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下:
1.代码段(Code)
        代码段由程序中的各个函数产生,函数的每一个语句将最终经过编译和汇编生成二进制机器代码(具体生成哪种体系结构的机器代码由编译器决定)。      
 
2.只读数据段(RO Data)
        只读数据段由程序中所使用的数据产生,该部分数据的特点是在运行中不需要改变,因此编译器会将该数据放入只读的部分中。C语言的一些语法将生成只读数据段。
     
3.读写数据段(RW Data)
        读写数据段表示了在目标文件中一部分可以读也可以写的数据区,在某些场合它们又被称为已初始化数据段。这部分数据段和代码段,与只读数据段一样都属于程序中的静态区域,但是具有可写的特点。
       
4.未初始化数据段(BSS)
        未初始化数据段常被称之为BSS(英文Block Start by Symbol的缩写)。与读写数据段类似,它也属于静态数据区,但是该段中的数据没有经过初始化。因此它只会在目标文件中被标识,而不会真正称为目标文件中的一个段,该段将会在运行时产生。未初始化数据段只有在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。

5. 内存四区

1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

2、堆区(heap): malloc

3、数据区:
        全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未 初始化的静态变量在相邻的另一块区域。 

常量区 :常量字符串就是放在这里的。 程序结束后由系统释放

4、代码区:存放函数体的二进制代码。


参考:http://blog.csdn.net/wu5215080/article/details/38899259


猜你喜欢

转载自blog.csdn.net/he980725866/article/details/51286888
今日推荐