一、
1、未初始化的全局变量(.bss段)
bss段用来存放那些没有初始化和初始化为0的全局变量
int bass_array[1024 * 1024];
int main(int argc, char* argv[])
{
return 0;
}
#gcc -g bss.c -o bss.exe
#ls -l bss.exe
-rwxrwxr-x 1 root root 5975 Nov 16 09:32 bss.exe
#objdump -h bss.exe | grep bss
24 .bss 00400020 080495e0 080495e0 000005e0 2**5
变量bss_array的大小为4MB,而可执行文件大小只有5KB。由此可见,bss类型的全局变量只占运行时的内存空间,而不占用文件空间。
现代大多数操作系统,在加载程序时,会把所有的bss全局变量清0。作为全局变量,在整个程序运行周期内,bss数据段一直存在。
2、初始化过的全局变量(.data段)
data段用来存放那些初始化为非零的全局变量。
int data_array[1024 * 1024] = {1};
int main (int argc, char* argv[])
{
return 0;
}
#ls -l data.exe
-rwxrwxr-x 1 root root 4200313 Nov 16 09:34 data.exe
#objdump -h data.exe |grep \\.data
23 .data 00400020 080495e0 080495e0 000005e0 2**5
仅仅是把初始化的值改为非0了,文