免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1238 | 回复: 4
打印 上一主题 下一主题

发现一个有趣的现象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-14 22:37 |只看该作者 |倒序浏览
#include <stdio.h>
int a[1000] = {1};
int
main(void)
{
        printf("hello, world\n");
        return (1);
}

如果把a[1000]={0},会发现结果不一样。。。

[root@localhost ~]# ls -l a.out
-rwxr-xr-x 1 root root 8757 11-14 22:33 a.out
[root@localhost ~]# size a.out
   text    data     bss     dec     hex filename
    849    4280       4    5133    140d a.out


[root@localhost ~]# size a.out
   text    data     bss     dec     hex filename
    849     260    4032    5141    1415 a.out
[root@localhost ~]# ls -l a.out
-rwxr-xr-x 1 root root 4717 11-14 22:33 a.out

所以说初始化的全局数组放在data段,未初始化放在.bss段是不准确的。

至少 gcc已经优化了初始化成零的人仍放在.bss段。。。

论坛徽章:
0
2 [报告]
发表于 2006-11-14 23:11 |只看该作者
对 globl 与 stack 变量

编译器对
static a[1000]; 与 static a[1000] = {0}; 处理手法是一样的,属于未初始化。

论坛徽章:
0
3 [报告]
发表于 2006-11-16 15:09 |只看该作者
UNIX和C都是在小内存小外存的PDP-8上搞出来的。第一原则是占空间最小。

论坛徽章:
0
4 [报告]
发表于 2006-11-16 15:12 |只看该作者
参考 http://bbs2.chinaunix.net/viewthread.php?tid=856216

16 楼我回的帖。(英语)

论坛徽章:
0
5 [报告]
发表于 2006-11-16 16:28 |只看该作者
原帖由 mik 于 2006-11-14 23:11 发表
对 globl 与 stack 变量

编译器对
static a[1000]; 与 static a[1000] = {0}; 处理手法是一样的,属于未初始化。


果真未初始化吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP