Я написал конвертер, который принимает файлы openstreetmap xml и преобразует их в формат рендеринга двоичного исполнения, который обычно составляет около 10% от исходного размера. Размер входных файлов обычно составляет 3 ГБ и больше. Входные файлы не загружаются сразу в память, а передаются по точкам и полисам, затем на них запускается bsp, и файл выводится. В последнее время на больших файлах заканчивается память и умирает (у этого вопроса есть 14 миллионов точек и 1 миллион полигонов). Как правило, моя программа использует примерно 1 гб до 1,2 ГБ оперативной памяти, когда это происходит. Я попытался увеличить виртуальную память с 2 до 8 гб (на XP), но это изменение не повлияло. Кроме того, поскольку этот код является открытым исходным кодом, я бы хотел, чтобы он работал независимо от доступного RAM (хотя и медленнее), он работает на Windows, Linux и Mac.Как избежать нехватки памяти в приложении с большой памятью? C/C++
Какие методы я могу использовать, чтобы избежать нехватки памяти? Обработка данных в меньших подмножествах, а затем объединение окончательных результатов? Используя мой собственный тип обработчика виртуальной памяти? Любые другие идеи?
Windows может иметь 3 ГБ виртуального пространства с/LARGEADDRESSAWARE –
Флаг позволяет процессу использовать до 4 ГБ *, если ОС может предоставить его *. Как правило, Windows по-прежнему настроена, чтобы дать всего 2 ГБ каждому процессу. Это тоже можно изменить, рискуя нестабильностью драйверов, чтобы дать вам 3 ГБ, да. С PAE вы можете получить еще больше. Но 64-битная версия, вероятно, лучше. – jalf
Имхо, третий вариант - самый важный. Помимо управления памятью, он также позволяет осуществлять параллельную обработку. – xtofl