C程序的存储布局---数据段和缓冲段

本文探讨了程序中初始化(.data)与非初始化(.bss)数据段的区别及作用,并通过示例说明了非初始化数据如何影响程序目标文件的大小。

 初始化数据段(.data):通常也称为数据段,它包含程序中明确给定初值的全局变量和静态变量。初始化数据段在编译的时候确定该段的大小,在程序运行的过程中该段的大小不能发生改变。

非初始化数据段(.bss):存储在这个段中的数据,通常是没有明确给定初值的全局变量和静态变量。这个段的内容往往不存储在外存上,而是在程序运行的时候由内核将段中的数据初始化为0或者NULL(对于指针变量而言)。

示例:bss段对程序目标文件大小的影响

bss1.c

#include <stdio.h>

int a[30];

int main()

{

printf("hello world/n");

return 0;

}

bss2.c

#include <stdio.h>

 

//int a[30];

int main()

{

printf("hello world/n");

return 0;

}

bss3.c

#include <stdio.h>

 

int a[30]={10,...10};

int main()

{

printf("hello world/n");

return 0;

}

bss4.c

#include <stdio.h>

 

int a[30]={0,...0};

int main()

{

printf("hello world/n");

return 0;

}

在红帽和CentOS下分别测试:

-rwxrwxrwx    1 root     root         4698 Jul 20  2009 bss1
-rwxrwxrwx    1 root     root         4668 Jul 20  2009 bss2
-rwxrwxrwx    1 root     root         4838 Jul 20  2009 bss3
-rwxrwxrwx    1 root     root         4838 Jul 20  2009 bss4

-rwxrwxrwx    1 root     root        11582  7月 20 15:22 bss1
-rwxrwxrwx    1 root     root        11548  7月 20 15:19 bss2
-rwxrwxrwx    1 root     root        11718  7月 20 15:20 bss3
-rwxrwxrwx    1 root     root        11718  7月 20 15:21 bss4

bss1 与bss2相差的字节数是系统用于标记未初始化变量的大小、属性等信息开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值