虚拟存储器
每个进程看到的是一致的存储器,称为虚拟地址空间。在linux系统中,地址空间最上面的的区域是为操作系统中的代码和数据保留的,这对进程来说都一样。地址空间的地步区域存放用户进程定义的代码和数据。下图中的地址是从下往上增大的。
内存虚拟存储器 -> 用户代码不可见的存储器
|
用户栈(运行时创建的)
|
共享库的存储器映射区域 -> printf函数
|
运行时堆(在运行时由malloc创建的)
|
读/写数据 -> 从hello可执行文件
只读的代码和数据 加载进来
| ->0x08048000(32) / 0x00400000(64)
| ->0
- 程序代码和数据。对于所有进程来说,代码是从同一固定地址开始,紧接着的是和C全局变量相对应的数据位置。
- 堆。当调用如malloc何free这样的C标准库函数时,堆可以在运行时动态地扩张和收缩。
- 共享库。存放像C标准库和数学库这样共享库的代码和数据的区域。
- 栈。编译器用它来实现函数调用。
- 内核虚拟存储器。内核总是驻留在内存中,是操作系统的一部分。