进程的逻辑内存空间
共享库和 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]


程序执行的结果

$ ./4localint 0xbfd810b8 stack 栈
globint 0x804a024 data 全局
glob static 0x804a028 data 全局static
local static 0x804a02c data 本地static
local pa 0x9757008 heap 堆 引用