进程空间

程序:源代码经编译器编译后生成的可执行文件,属于静态概念。

进程:可执行文件,运行后可被加载内存中运行,运行的过程即为过程,属于动态概念。

早期程序是真实映射到内存中,后来操作系统(32位)采用虚拟内存技术,将4G的内存虚拟地址空间划分为两个部分:用户空间和内核空间。

用户空间范围:0—3G

内核空间范围:3G—4G

通过虚拟内存和分页技术实现了多进程并行。

此图摘自王大哥的《C语言实战与提高》

command args  存储的是进程命令即命令行参数

stack  存储的是普通的局部变量(地址从高到低分配)

dymamic  lib(加载动态库区):内存映射、动态库在此处加载。

heap   存储的是使用动态分配内存的变量(地址从低到高)

data(数据区):分为uninit(未初始化)数据区、init(初始化)数据区。

其中未初始化的全局变量或静态的全局或局部变量放在bss数据段中。(变量未初始化时,由系统初始化为0,存放在bss段。)

初始化的数据分为:rw(可读写段)、ro(只读段)。

rw存放的是初始化的全局变量或静态的全局或局部变量。(即bss段的初始化后放在rw段中)。

ro存放的是用于初始化的常量数据(一般为字符串常量),但一些常量(一般为数组中的常量)存放在text(代码段)。

posted @ 2016-03-17 09:03  Sayer  阅读(188)  评论(0编辑  收藏  举报