我知道我可以使用 VirtualAlloc 保留虚拟内存。
例如,我可以申请 1GB 的虚拟内存,然后调用其中的第一个 MB 来放入我不断增长的数组。
当数组超过 1MB 时,我会调用第 2 个 MB,依此类推。
这样,当阵列增长时,我不需要在内存中移动阵列,它只是保持原位,英特尔/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 支持这个吗?