进程的逻辑内存空间
共享库和 mmap 内存映射
数据段 (全局static和本地static,全局变量)
代码段
堆(malloc ,引用)
栈 (本地变量,所以这个会是个随机数)
测试用程序
#include <stdio.h> #include <stdlib.h> #include <unistd.h> static int static_glob = 0; int int_glob = 0; int main() { int int_local; static int static_local = 0; int *pa = malloc(sizeof(int)); *pa = 0; printf("local int %p\n", &int_local); printf("glob int %p\n", &int_glob); printf("glob static %p\n", &static_glob); printf("local static %p\n", &static_local); printf("local pa %p\n", pa); while(1) sleep(1); return 0; } </unistd.h></stdlib.h></stdio.h>proc 下的进程 Id 下的 maps 文件可以见到内存的分配
heap 堆
stack 栈
数据区
代码区之类
$ cat /proc/13458/maps
007a6000-007a7000 r-xp 00000000 00:00 0 [vdso]
00c84000-00ca0000 r-xp 00000000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00ca0000-00ca1000 r--p 0001b000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00ca1000-00ca2000 rw-p 0001c000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00e86000-00fe0000 r-xp 00000000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe0000-00fe1000 ---p 0015a000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe1000-00fe3000 r--p 0015a000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe3000-00fe4000 rw-p 0015c000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe4000-00fe7000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 08:07 132093 /home/fukai/C/4
08049000-0804a000 r--p 00000000 08:07 132093 /home/fukai/C/4
0804a000-0804b000 rw-p 00001000 08:07 132093 /home/fukai/C/4
09757000-09778000 rw-p 00000000 00:00 0 [heap]
b76ff000-b7700000 rw-p 00000000 00:00 0
b7711000-b7714000 rw-p 00000000 00:00 0
bfd61000-bfd82000 rw-p 00000000 00:00 0 [stack]程序执行的结果
$ ./4
local int 0xbfd810b8 stack 栈
glob int 0x804a024 data 全局
glob static 0x804a028 data 全局static
local static 0x804a02c data 本地static
local pa 0x9757008 heap 堆 引用