我昨天了解到在 DelphiXE 中使用编译器指令:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
即使 DelphiXE 编译器生成 32 位代码,您也可以在 64 位计算机上访问/使用 4GB 地址空间。
我今天在装有 Windows 7 的 4GB 机器上尝试了 DelphiNE 程序,启动该程序后
我确实得到了以下结果:
- 物理内存 KB:~4.000.000KB
- 可用物理内存 KB:~3.200.000KB
- 内存使用百分比:~20%
- 虚拟地址空间千字节数:~4.000.000KB¡
- 可用虚拟地址空间千字节数:~4.000.000KB
每次加载多个对象(表、字符串、列表、大量指针)后可用内存的数量
下降,这很好,直到所有内存都用完。一切都很好。但这里有一些问题:
1.
有时我得到的信息是程序使用硬盘而不是内存,
因为它减慢了速度(但内存仍然可用)。
那可能吗?如果是,当 RAM 仍然可用时,如何防止程序使用光盘?
或者也许一些临时文件被写入光盘?
同样的程序在 8G RAM 的机器上会发生什么?
32位程序可以使用全部8G吗?
我想不会,因为指针只有 32 位,并且它们可以访问的内容是有限的。
如果我用 64 位在 64 位机器上编译相同的程序
编译器(不幸的是,这是不可能的),
我的猜测是,在具有 4GRam 的机器上,64 位程序的可用 RAM 空间会更少
比启用“IMAGE_FILE_LARGE_ADDRESS_AWARE”的 32 位程序,
因为指针是 64 位的,因此它们本身就比 32 位指针花费了更多的空间。
我的想法完全错误吗?
感谢您的任何回复。
是的,如果操作系统认为有必要,会将部分虚拟内存(即所谓的 RAM)交换到分页文件。
32 位程序将无法使用超过 4 GB(即使在 64 位 Windows 上),并且最终本机 64 位程序不会使用比 32 位程序更多的内存,因为指针大小(内部 32 位指针是 64 x64 窗口中的位指针)。
附注:如果您设置 Large Address Aware 开关,您应该真正确定您的应用程序(包括 vcl、delphi 单元和组件)可以处理 > 2 GB 的地址。例如,将指针强制转换为整数是不允许的。当然还有更多的陷阱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)