乐闻世界logo
搜索文章和话题

C中数据段和bss段的区别

3 个月前提问
3 个月前修改
浏览次数43

1个答案

1

在C语言编写的程序中,数据段(Data Segment)和BSS段(Block Started by Symbol)是两个用于存储程序变量的内存区域,但它们的用途和存储的内容有所不同。

数据段

数据段主要用于存储程序中的初始化的全局变量和静态变量。这些变量在程序编译时已经被赋予了初值。数据段是程序的一部分,因此它在程序加载到内存时被创建,并且通常位于固定的内存地址。

例子

c
int globalVar = 5; // 初始化的全局变量,存储在数据段 static int staticVar = 10; // 初始化的静态变量,也存储在数据段

BSS段

BSS段用于存储未初始化的全局变量和静态变量。在内存中,BSS段的变量初始值为零或空(NULL)。和数据段相比,BSS段通常不占用程序文件的存储空间,只在程序加载到内存时被创建,并分配必要的内存空间。

例子

c
int globalVar; // 未初始化的全局变量,存储在BSS段 static int staticVar; // 未初始化的静态变量,也存储在BSS段

总结

总而言之,数据段和BSS段的主要区别在于数据段存储初始化的变量,而BSS段存储未初始化的变量。数据段的变量在编译时已被赋初值,而BSS段的变量在程序启动时被自动初始化为0或NULL。这种区分有助于优化程序的存储空间和加载时间,因为BSS段的变量不需要在程序文件中占用具体的存储空间。

2024年7月19日 17:55 回复

你的答案