DELPHI内存详解(1)-应用程序内存组成

来源:互联网 发布:哈根达斯 知乎 编辑:程序博客网 时间:2024/06/07 16:08
 

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

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

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

_MEMORYSTATUS = record

dwLength: DWORD;        {结构长度}

dwMemoryLoad: DWORD;   {表示可用内存比例的一个整数, 100 表示内存都可用}

dwTotalPhys: DWORD;     {物理内存总数}

dwAvailPhys: DWORD;     {可用物理内存总数}

dwTotalPageFile: DWORD;   {虚拟内存总数}

dwAvailPageFile: DWORD;   {可用虚拟内存总数}

dwTotalVirtual: DWORD;     {虚地址表中的地址总数}

dwAvailVirtual: DWORD;     {虚地址表中可用的地址总数}

end;

TMemoryStatus = _MEMORYSTATUS;

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个月婴儿吵夜怎么办 玩游戏一直闪退怎么办 钱站一直闪退怎么办 win7重装连不上网怎么办 笔记本屏幕横过来了怎么办 3D贴图丢了怎么办 百度文库安装后手机打不开怎么办 win7系统不带usb驱动怎么办 手机网页上的pdf打不开怎么办 网页下载pdf后缀是.do怎么办 ps界面太小怎么办win10 ps软件打不开程序错误怎么办 ps打开后 未响应怎么办 ps图层无法解锁怎么办 ie8浏览器电脑不能用怎么办 系统要ie6.0才能打开怎么办 2g手机内存不够怎么办 2g运行内存不够怎么办 手机运行内存2g不够怎么办 手机无法加载程序秒退怎么办 电脑账户密码忘记了怎么办 玩绝地求生卡顿怎么办 地下城总运行时间错误怎么办 逆战更新太慢怎么办 win7我的电脑没了怎么办 剑灵启动游戏慢怎么办 网页页面结束进程也关不掉怎么办 开机就启动微信怎么办 微信突然无法启动怎么办 微信发送太频繁怎么办 微信在电脑上打不开文件怎么办 微信照片电脑上打不开怎么办 换一部手机微信怎么办 微信支付宝停止运行怎么办 剑三重制版卡顿怎么办 剑三客户端更新不动了怎么办 安装包安装失败怎么办有内存 qq飞车换手机了怎么办 qq飞车求婚失败戒指怎么办 改脸型皮肤会下垂怎么办 情侣关系弄僵了怎么办