虚拟地址空间

windows 32bit操作系统 进程地址空间可用地址区域一般是 0x00010000->0x7FFEFFFF。总共2G.进程无法通过指针来读取、写入或以任何方式,访问驻留在这一分区中的其他进程的数据。

另外,内核模式分区范围是:0x80000000->0xFFFFFFFF  也是2G.这一分区是操作系统代码的驻地,与线程调度、内存管理、文件系统支持、网络支持以及设备驱动程序相关的代码都载入到该分区。在这一分区内的任何东西为所有进程共有。

所以,在32位系统中,内核对象的内容被保存在0x80000000至0xFFFFFFFF的这个内核地址空间中)
 

好像暂时这样理解:

1.页交换文件,它是在硬盘c空间上的pagefile.sys。

在从微软的官方文档来看,“虚拟内存”等于“物理内存”+“分页文件”总和。应该指的是大小对应的关系。

2.内存映射文件来自于硬盘其他文件,如exe文件,而不是页交换文件。

3种对内存操控的机制

1.虚拟内存

2.堆

3.内存映射文件:把一个程序位于硬盘上的文件映像(即一个exe或者dll文件)用作地址空间区域对应的物理存储器时,称这个文件映像为内存映射文件。

虚拟内存使用硬盘只能是页面文件,而内存映射使用的磁盘部分可以是任何磁盘文件

虚拟内存

预订地址空间 :virtualAlloc 函数

LPVOID lpAddress, // 要分配的内存区域的地址

DWORD dwSize, // 分配的大小

DWORD flAllocationType, // 分配的类型

DWORD flProtect // 该内存的初始保护属性

}

lpAddress:可以为null,系统将会决定分配内存区域的位置,并且按64-KB向上取整(roundup),

必须是进程的用户模式分区的地址,

dwSize:这个参数以字节为单位,真实情况会是:页面大小(一般是4k)的整数倍

flAllocationType:

可以是MEM_COMMIT(为指定地址空间提交物理内存)调拨  是从页交换文件调拨

MEM_RESERVE保留指定地址空间,不分配物理内存)预订   

MEM_TOP_DOWN(在尽可能高的地址分配内存。)

DWORD flProtect  可以是PAGE_READWRITE

VirtualFree

LPVOID lpAddress, // 区域地址  

SIZE_T dwSize, // 区域大小,字节   可以是0

DWORD dwFreeType // 类型    MEM_RELEASE 释放指定页,如果指定了这个类型,则dwSize应设置为0

进程的虚拟地址空间类型:

1.闲置

2.私有:以页交换文件为后备存储器  比如虚拟内存

3.映像:以映像文件(exe或dll)为后备存储器         

4.已映射:以内存映射文件为后备存储器

还是区分不清映像和已映射。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值