物理内存和虚拟内存的关系
进程容器中4GB空间的内容分布
在所谓的4GB空间内,系统内核占据了高2GB的空间,普通进程看不见摸不着,而且高2GB的空间是全局共享。全局就那么一份,各个进程间共享
观察进程内存分布,我们发现进程中真正使用的内存远远不到2gb,而且地址不是连续的。说明操作系统并不是一次性吧内存都给予进程
其实操作系统非常鸡贼,它只分配进程当前需要使用的内存,不需要的一律不分配
在进程中有一台地址规则,和物理内存有映射关系
内存页
私有内存的分配 (相关win32 api)
//申请内存(预定区域/调拨物理页) LPVOID VirtualAlloc ( LPVOID lpAddress, // 申请虚拟内存的地址 一般情况下填NULL 由系统指定地址 SIZE_T dwSize, // 申请内存块的大小 内存分配按照内存页`0x1000` (64k)为最小单位,所以这里最好填写 `0x1000`的整数倍(64k整数倍) DWORD flAllocationType, // 申请内存的状态 DWORD flProtect // 申请内存的保护属性 ); //释放内存(释放区域/撤销调拨) BOOL VirtualFree ( LPVOID lpAddress, // 释放的内存地址 SIZE_T dwSize, // 释放的内存大小 DWORD dwFreeType // 释放内存的方式 ); //内存块的类型 闲置 FREE 私有 PRIVATE 映象 IMAGE 映射 MAPPED //内存块的状态 预定 RESERVE 调拨 COMMIT 空闲 FREE //预定:在我自己的虚拟内存空间中先站住位置,但是并不分配物理内存 //调拨:真正的分配了物理页,物理内存
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论