进程的内存布局

32位内存经典布局

  / +----------------------------------------+ 0xFFFFFFFF
1GB |              Kernel Space              |
  \ +----------------------------------------+ 0xC0000000 == TASK_SIZE
  / |                  Stack ↓               |
 |  +----------------------------------------+
 |  |                                        |
 |  +----------------------------------------+
 |  |         Memory Mapping Region ↑        |
 |  +----------------------------------------+ 0x40000000
3GB |                                        |
 |  +----------------------------------------+
 |  |                  Heap ↑                |
 |  +----------------------------------------+
 |  |              BSS Segment               |
 |  +----------------------------------------+
 |  |              Data Segment              |
 |  +----------------------------------------+
 |  |            Text Segment (ELF)          |
 |  +----------------------------------------+ 0x08048000
  \ |                                        |
    +----------------------------------------+ 0x00000000

Linux操作系统为安全性做了地址空间随机化

  / +----------------------------------------+ 0xFFFFFFFF
1GB |              Kernel Space              |
  \ +----------------------------------------+ 0xC0000000 == TASK_SIZE
  / |                                        | \
 |  |                                        | Random stack offset
 |  |                                        | /
 |  +----------------------------------------+ \
 |  |                  Stack ↓               | RLIMIT_STACK
 |  +----------------------------------------+ /
 |  |                                        | \
 |  |                                        | Random mmap offset
 |  |                                        | /
 |  +----------------------------------------+
 |  |         Memory Mapping Segment ↓       |
 |  +----------------------------------------+
 |  |                                        |
3GB |                                        | program break
 |  +----------------------------------------+ brk
 |  |                  Heap ↑                |
 |  +----------------------------------------+ start_brk
 |  |                                        | \
 |  |                                        | Random brk offset
 |  |                                        | /
 |  +----------------------------------------+
 |  |              BSS Segment               |
 |  +----------------------------------------+ end_data
 |  |              Data Segment              |
 |  +----------------------------------------+ start_data
 |  |            Text Segment (ELF)          |
 |  +----------------------------------------+ 0x08048000
  \ |                                        |
    +----------------------------------------+ 0x00000000
存放函数参数/返回值和局部变量

存放 malloc/new 动态分配的数据

BSS(Block Started by Symbol)存放未初始的全局/静态变量

数据段 存放初始化的全局/静态变量,可以进一步分成RO(只读)和RW(读写)区

文本段 存放程序代码

posted on 2013-03-30 13:42  chenkkkabc  阅读(218)  评论(0编辑  收藏  举报