物理内存和虚拟内存的关系

admin 2018年5月10日19:36:19评论453 views字数 737阅读2分27秒阅读模式
摘要

进程容器中4GB空间的内容分布在所谓的4GB空间内,系统内核占据了高2GB的空间,普通进程看不见摸不着,而且高2GB的空间是全局共享。全局就那么一份,各个进程间共享


物理内存和虚拟内存的关系

进程容器中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  //预定:在我自己的虚拟内存空间中先站住位置,但是并不分配物理内存 //调拨:真正的分配了物理页,物理内存

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月10日19:36:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   物理内存和虚拟内存的关系http://cn-sec.com/archives/51293.html

发表评论

匿名网友 填写信息