# 内存管理 - [什么是内存](#什么是内存) - [栈与调用约定](#栈与调用约定) - [堆与内存管理](#堆与内存管理) ## 什么是内存 为了使用户程序在运行时具有一个私有的地址空间、有自己的 CPU,就像独占了整个计算机一样,现代操作系统提出了虚拟内存的概念。 虚拟内存的主要作用主要为三个: - 它将内存看做一个存储在磁盘上的地址空间的高速缓存,在内存中只保存活动区域,并根据需要在磁盘和内存之间来回传送数据。 - 它为每个进程提供了一致的地址空间。 - 它保护了每个进程的地址空间不被其他进程破坏。 现代操作系统采用虚拟寻址的方式,CPU 通过生成一个虚拟地址(Virtual Address(VA))来访问内存,然后这个虚拟地址通过内存管理单元(Memory Management Unit(MMU))转换成物理地址之后被送到存储器。 ![](../pic/1.5.7_va.png) 前面我们已经看到可执行文件被映射到了内存中,Linux 为每个进程维持了一个单独的虚拟地址空间,包括了 .text、.data、.bss、栈(stack)、堆(heap),共享库等内容。 32 位系统有 4GB 的地址空间,其中 0x08048000~0xbfffffff 是用户空间(3GB),0xc0000000~0xffffffff 是内核空间(1GB)。 ![](../pic/1.5.7_vm.png) ## 栈与调用约定 ## 堆与内存管理