如何编写一个映射4 GB的内存管理器用于Delphi

时间:2010-07-07 01:55:16

标签: delphi

我有一个使用超过2千兆字节虚拟内存的对象 但Delphi只管理2 GB 我正在考虑以太制作一些对象并将它们分组并使用windows wow64方法一些如何使用64位窗口。 或者只是将内存管理器升级到4 GB并围绕Int64构建它。 实际上,我需要使用TStream作为使用Int64的基础对象,而不是整数。

4 个答案:

答案 0 :(得分:14)

Lexdean,你说的是:

  

实际上我需要使用TStream作为使用Int64的基础对象,而不是整数

那么,你很幸运(两次)因为:

  1. Delphi的TStream使用Int64作为位置,它可以访问比4Gb大得多的文件。
  2. 如果TStream接口足够,您可以编写自己的TStream来做任何你想做的事情,你不需要等待原生的64位Delphi编译器。
  3. 但如果我要回答标题中的问题:

      

    如何编写一个为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的虚拟内存。

但是,Guffa是对的。如果你的对象试图抓住2GB +的连续内存,你可能做错了什么。你想做什么?也许有一种更简单的方式......

答案 3 :(得分:2)

您可以使用AWE API来获取对win32应用中更多内存的访问权限。但是你必须考虑围绕AWE的你的代码,而不是为你的代码调整AWE用法。我的意思是你可以写一个TAWEMemoryStream ......但这不是一个好主意。