-1

Я создаю программы в Delphi 32 бит. Мой компьютер работает под управлением Windows 7 64 бит с 8 ГБ памяти.

Когда моей 32-битной программе требуется больше 3,8–4 ГБ памяти в Windows 7, появляется сообщение "Недостаточно памяти".

Это ошибка моей программы или Windows?

3 ответа3

10

Если ваша программа написана как 32-битное приложение, она может использовать только 32-битную подсистему Windows, которая по-прежнему присутствует во всех версиях 64-битной Windows. Чтобы использовать более 4 ГБ (или 3 ГБ), вам нужно перекомпилировать свою программу и выбрать платформу 64Bit.

3

Ваше приложение по-прежнему является 32-разрядным приложением, поэтому оно может адресовать максимум 2 ^ 32 = 4 ГБ памяти. Если вы не выполнили никаких настроек, наиболее вероятный объем памяти, доступный для вашего приложения, составляет всего 2 ГБ. Рассматривали ли вы переписать ваше приложение так, чтобы оно не занимало так много памяти?

-1

32-разрядные программы используют 32-разрядный адрес, поэтому они не могут адресовать более 4 ГБ памяти (если только вы не используете AWE, что может увеличить диапазон памяти, к которому вы можете получить доступ, но вы по-прежнему ограничены 4 ГБ за раз)

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

Также возможно, что используемый вами алгоритм неэффективен. В зависимости от проблемы могут быть разные решения, такие как разреженные массивы, или деление на маленькие части и выполнение только одной части за раз ...

В любом случае, переход на 64 бита - лучшее решение. Вместо этого скомпилируйте вашу программу как 64-битную

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .