区别:
.data段:
存放已初始化的全局变量。在编译器编译的时候,会给已初始化的数据分配内存空间,数据保存在目标文件中。
.bss段:
(bss是英文Block Started by
Symbol的简称。)存放未初始化的全局变量。在编译器编译的时候,不会给该段的数据分配空间,只是记录数据所需的空间大小。程序执行的时候再分配内存并将内存清零。
为什么要分.data段和.bss段?
在程序编译的时候,不会给.bss段中的数据分配空间,只是记录数据所需空间的大小。在程序执行的时候,才会给.bss段中的数据分配内存。通过这种方式,可以节省一部分内存空间,进一步缩减可执行程序的大小。
思考:
C:请描述一个可执行程序占用的内存分为哪几个区?每个分区各自的作用?
C:谈谈内存分配中的(.data)段和(.bss)段的区别?为什么要分.data段和.bss段?
C:谈谈内存分配中的堆和栈的区别?为什么要有堆区和栈区呢?