Я знаю, что могу зарезервировать виртуальную память с помощью VirtualAlloc.
например. Я могу потребовать 1 ГБ виртуальной памяти, а затем вызвать первый из них, чтобы поместить в него растущий массив.
Когда размер массива превысит 1 МБ, я вызову второй МБ и так далее.
Таким образом, я не мне не нужно перемещать массив в памяти, когда он растет, он просто остается на месте, а менеджер виртуальной памяти 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 это?
VirtualAlloc
; Зачем это делать универсальному диспетчеру памяти? - person Cosmin Prund   schedule 17.06.2011