进程空间
程序:源代码经编译器编译后生成的可执行文件,属于静态概念。
进程:可执行文件,运行后可被加载内存中运行,运行的过程即为过程,属于动态概念。
早期程序是真实映射到内存中,后来操作系统(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(代码段)。