应用程序内存组成

对于 Windows 32 来说,系统会给每个进程 4GB 的地址空间,低端 2GB $00000000-$7FFFFFFF )给用户支配;高端 2GB $80000000-$FFFFFFFF )留给系统使用,这个 4G 的地址空间叫“虚拟地址表”,虚拟地址表不是真实的内存。

这个“虚拟地址表”上有 4GB 的空间,每个程序都有这样的一个表,但他们并不会冲突,这样就阻断了一个进程对另一个进程的访问,系统在需要的时候会把他们映射成具体的真实内存地址。

可以使用 GlobalMemoryStatus 来获取内存信息,获取后的信息放在 TMemoryStatus 结构体中。


 

在用户的 2GB 地址空间中,低端的 0-$FFFF 是用于空指针分配,高端的 $7FFF0000-$7FFFFFFF 用于进程的临界区,这两个地址都是禁止访问的。 进程真正的私有空间地址是: $10000-$FFEFFFF 。我们可以通过 GetSystemInfo 函数得到证实,函数返回 TSystemInfo 结构,结构中的 lpMinimumApplicationAddress lpMaximumApplicationAddress 分别标识程序可以访问的最低与最高地址,通过 GetSystemInfo 还能得到一个内存相关的重要参数:页大小( PageSize ),通常大小是 4K ,我们需要知道的是,用 VirtualAlloc 函数分配的内存就是 PageSize 4K )为最小单位,假如我们用 VirtualAlloc 给一个整数分配内存,就会浪费 4092 个字节。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值