- 原理
- 虚拟内存(virtual memory)
- 页表(page table)
- 控制寄存器(control register)
- 4级页表(PML4)
- 转换检测缓冲区(TLB, translation lookaside buffer)
- DMA
- 栈
- 申请方式: 系统自动分配
- 申请响应: 栈剩余空间小于申请空间, 报overflow
- 申请大小限制: 栈是向低地址扩展的连续内存,线顶地址和最大容量是系统编译时预设的,windows下为2M(或1M), 申请超过剩余空间报overflow
- 申请效率: 系统分配,速度快
- 存储内容: 函数调用时,函数调用语句的下一条指令的地址进栈,然后是参数(C中由右向左), 然后是局部变量。调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向开始保存的函数下一指令,继续运行
- 数据结构: 满足后进先出的数据结构
- 堆
- 申请方式: 程序手动申请
- 申请响应: os有记录空闲内存地址的链表,申请时遍历链表,寻找第一个空间大于申请空间的堆结点,该结点从空闲结点删除,节点分配给程序。自动将多余部分重新放入空闲链表
- 申请大小限制:堆是向高地址扩展的不连续内存,系统用链表存储空闲内存地址。受限于有效虚拟内存
- 申请效率: 慢,容易产生内存碎片
- 存储内容: 堆头部一个字节存放堆的大小。内容由程序员安排
- 数据结构: 满足优先队列的数据结构(第1个元素有最高优先权)