32-разрядные программы используют 32-разрядный адрес, поэтому они не могут адресовать более 4 ГБ памяти (если только вы не используете AWE, что может увеличить диапазон памяти, к которому вы можете получить доступ, но вы по-прежнему ограничены 4 ГБ за раз)
Однако по умолчанию вы можете использовать только 2 ГБ ОЗУ в 32-разрядных приложениях, поскольку более 2 ГБ зарезервировано для ядра. Вы можете увеличить ограничение до 3 ГБ (4 ГБ в 64-битных окнах), связав программу с параметром /LARGEADDRESSAWARE
и загрузившись с флагом /3GB
. Если вы видите, что ваша программа действительно потребляет почти 4 ГБ ОЗУ, флаг уже включен, и вы не можете выйти за этот предел
Также возможно, что используемый вами алгоритм неэффективен. В зависимости от проблемы могут быть разные решения, такие как разреженные массивы, или деление на маленькие части и выполнение только одной части за раз ...
В любом случае, переход на 64 бита - лучшее решение. Вместо этого скомпилируйте вашу программу как 64-битную