进程虚拟地址空间
- 用户所使用的栈、堆内存空间都是在用户空间去分配
- 文件系统的缓存、driver使用的缓存都是存在和心态地址空间
用户态虚拟地址空间状态
- free:该段地址空间可自由分配
- reserving:该段地址空间被预订,但是未被映射到物理地址中,无法被分配
- committed:该段地址空间被映射到物理地址空间了
进程使用的内存的类型
- private bytes:进程的虚拟地址空间中已被分配的内存,不包括和其他进程共享的内存(如共享的动态链接库文件,kernel32.dll、user32.dll等)
- virtual bytes:进程使用的虚拟地址空间大小,包括和其他进程共享的内存(如共享的动态链接库文件,kernel32.dll、user32.dll等)
- working set:进程所使用的的物理内存大小
paging file
用来保存进程修改过的内存数据,当这部分数据内容被访问时,再从paging file中转移到物理内存中。
动态链接库DLL
- DLL文件包含函数、结构等
- DLL必须被装载到进程中才能运行
- DLL的映像文件被映射到进程的地址空间,之后该进程下的所有线程都可以调用DLL中的函数
- 每个DLL都有一个入口函数DLLmain,以下情况会进入入口函数:
- DLL的载入时机:编译时载入(import)、运行时载入(LoadLibrary或LoadLibraryEX来载入,通过GetProcAddress()获得输出函数的地址)