VirtualAllocを使用して仮想メモリを予約できることはわかっています。
たとえば、1 GBの仮想メモリを要求し、その最初のMBを呼び出して、増大するアレイを配置できます。
配列が1MBを超えると、2番目のMBを呼び出します。
このように、アレイが大きくなったときにアレイをメモリ内で移動する必要はありません。アレイはそのまま残り、Intel/AMD仮想メモリマネージャが問題を処理します。
ただし、FastMMはこの構造をサポートしているので、独自のメモリ管理を行う必要はありませんか?
擬似コード:
type
PBigarray = ^TBigarray;
TBigArray = array[0..0] of SomeRecord;
....
begin
VirtualMem:= FastMM.ReserveVirtualMemory(1GB);
PBigArray:= FastMM.ClaimPhysicalMemory(VirtualMem, 1MB);
....
procedure GrowBigArray
begin
FastMM.ClaimMorePhysicalMemory(PBigArray, 1MB {extra});
//will generate OOM exception when claim exceeds 1GB
FastMMはこれをサポートしていますか?