Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251124
  • 博文数量: 45
  • 博客积分: 802
  • 博客等级: 军士长
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-08 12:21
文章分类
文章存档

2014年(4)

2013年(4)

2012年(37)

我的朋友

分类: C/C++

2012-01-10 10:19:26

1. 初始化为非零值的静态分配数据和全局数据存在数据段中,运行相同程序的每个进程都有自己的数据段。
2. 初始化为零值的静态分配数据和全局数据存放在进程的BSS区域内。

测试代码:

  1. int d;
  2. int e = 0;
  3. int f = 10;
  4. int main(int argc, char** argv)
  5. {
  6. static int a=0;
  7. static int b = 10;
  8. static int c;
  9. }

用gdb调试:

(gdb) p &a
$1 = (int *) 0x8049544
(gdb) p &b
$2 = (int *) 0x8049538
(gdb) p &c
$3 = (int *) 0x8049548
(gdb) p &d
$4 = (int *) 0x804954c
(gdb) p &e
$5 = (int *) 0x8049540
(gdb) p &f
$6 = (int *) 0x8049534
(gdb)


[Nr] Name              Type            Addr               Off         Size   ES Flg  Lk Inf Al
[22] .data             PROGBITS        08049528 000528 000014 00  WA  0   0  4
[23] .bss              NOBITS          0804953c 00053c 000014 00  WA  0   0  4


.data节加载入内存后从 08049528 --> 08049528 + 14
.bss 节加载入内存后从 0804953c --> 0804953c + 14
注意:offset也是十六进制

所以f、b位于.data节
e、a、c、d位于.bss节

内存布局是这样的:
阅读(2120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~