Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67493
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-20 19:05
文章分类
文章存档

2016年(3)

2015年(15)

我的朋友

分类: C/C++

2015-05-30 23:04:49

  1. 点击(此处)折叠或打开

    1. #include <string.h>

    2. int g_strs[2*1024*1024]={1,2,3,4,5,6,7};
    3. int g_strd[2*1024*1024];

    4. int main()
    5. {
    6.     memcpy(g_strd,g_strs,2*1024*1024);
    7.     return 0;
    8. }
objdump -t  a.out:
0804a080 g     O .data 00800000              g_strs   即g_strs的地址是 0804a080 ~ 0884a080
0884a0c0 g     O .bss 00800000              g_strd  即g_strd的地址是 0884a0c0 ~0904a0c0
cat /proc/pid/smaps:
0804a000-0884b000 rw-p 00001000 08:01 1339300    /opt/work/a.out
...
0884b000-0904b000 rw-p 00000000 00:00 0          [heap]

可见g_strs落在data segment
     g_strd落在heap

结论:程序运行时,初始化的全局变量在data segment,未初始化的全局变量被分配在heap中


阅读(1917) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~