我有一个使用超过2千兆字节虚拟内存的对象 但Delphi只管理2 GB 我正在考虑以太制作一些对象并将它们分组并使用windows wow64方法一些如何使用64位窗口。 或者只是将内存管理器升级到4 GB并围绕Int64构建它。 实际上,我需要使用TStream作为使用Int64的基础对象,而不是整数。
答案 0 :(得分:14)
Lexdean,你说的是:
实际上我需要使用TStream作为使用Int64的基础对象,而不是整数
那么,你很幸运(两次)因为:
但如果我要回答标题中的问题:
如何编写一个为Delphi映射4 giggs的内存管理器
使用32位编译器无法做到这一点。加入群众,要求使用64位Delphi编译器!
答案 1 :(得分:5)
拥有一个2千兆字节的对象并不是一个好主意。如果内存碎片化,即使可用内存量足够,也无法分配内存。我建议您尝试使用较小的对象列表。
(我记得在Turbo Pascal(Delphi的前身)中一个变量不能大于64千字节...哦,时代......;)
答案 2 :(得分:4)
不幸的是,目前还没有编译64位代码的Delphi编译器。但是,如果将{$SetPeFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
放在DPR中,则可以从32位地址空间中获得更多。它在PE头中设置了一个标志,让Windows知道它可以为它分配超过2 GB的虚拟内存。
答案 3 :(得分:2)
您可以使用AWE API来获取对win32应用中更多内存的访问权限。但是你必须考虑围绕AWE的你的代码,而不是为你的代码调整AWE用法。我的意思是你可以写一个TAWEMemoryStream ......但这不是一个好主意。