例
-
-
#include <string.h>
-
-
int g_strs[2*1024*1024]={1,2,3,4,5,6,7};
-
int g_strd[2*1024*1024];
-
-
int main()
-
{
-
memcpy(g_strd,g_strs,2*1024*1024);
-
return 0;
-
}
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中
阅读(1963) | 评论(0) | 转发(0) |