Ваша фундаментальная проблема - ограничение жесткого адресного пространства 4 ГБ для 32-битных процессов.Поскольку вы сталкиваетесь с проблемами на 3 ГБ, я могу только предполагать, что вы используете /LARGEADDRESSAWARE
, работающий на 64-битной Windows или 32-битной Windows с переключателем загрузки / 3GB.
Я думаю, у вас есть несколько вариантов, включая, ноне ограничивается следующим:
- Используйте меньше памяти.Возможно, вы можете обрабатывать небольшими порциями или помещать часть памяти на диск.
- Используйте 64-битный Delphi (только что выпущенный) или FreePascal.Это освобождает вас от ограничения адресного пространства, но ограничивает вас 64-битными версиями Windows.
- Используйте файлы с отображением в памяти.На машине с большим объемом памяти это способ получить доступ к кешу памяти ОС.Файлы, отображаемые в память, не для слабонервных.
Я не могу дать окончательного решения относительно решения, поскольку не знаю вашу архитектуру, но по своему опыту уменьшение объема памяти часто является лучшим решением..
Использование другого распределителя, вероятно, мало что изменит.Да, это правда, что есть распределители с низкой фрагментацией, но они определенно не решат вашу проблему.Все, что они могли сделать, это сделать его чуть менее вероятным.