在早期的计算机中,程序都是直接运行在物理内存上的,意思是运行时访问的地址都是物理地址,而这要求程序使用的内存空间不超过物理内存的大小。
在现代计算机操作系统中,为了提高CPU的利用率计算机同时运行多个程序,为了将计算机上有限的物理内存分配给多个程序使用,并做到隔离各个程序的地址空间和提高内存利用率,操作系统应用虚拟内存机制来管理内存。
本文介绍的是一些与虚拟内存相关的概念,包括虚拟内存和物理内存之间的映射,一个进程的虚拟内存空间的划分等。
从各个角度看内存
cpu:根据指令给出的内存地址(虚拟内存地址),进行读写(物理内存地址)
操作系统角度:1.内存管理:每个进程的虚拟内存4GB,用户空间+系统内核空间。2.装载:进程装载,dll装载
可执行文件角度(dll,exe):加载到内存以后各部分的分配
进行运行过程中可能的问题:栈溢出,堆写坏
目录
1)Windows 系统下— NULL 指针区+用户区+ 64KB 禁入区+内核区
2)Linux下和Windows下的差不多——内核空间,用户空间和保留区
8.进程的虚存空间分布——装载(《程序员的自我修养-链接装载库》第6.4节)
1.工作集(内存)Working Set = 内存(专用工作集)+ 内存(共享工作集)【第2列=第3列+第4列】
2.提交大小 Comitted Memory——进程独占的内存
3.PROCESS_MEMORY_COUNTERS 类 和 GetProcessMemoryInfo 函数
文章比较长,也比较杂。可以分次阅读。【修改记录:2023.5.6修改看了1)】
1