Наше приложение не работает на компьютере конкретного пользователя с ERROR_NOT_ENOUGH_MEMORY
(«Недостаточно памяти для обработки этой команды»).
Ошибка, по-видимому, возникает где-то глубоко в рамках платформы Delphi VCL, которую мы используем, поэтому я не уверен, какая функция Windows API ответственна.
Является ли проблема с памятью? Вызов GlobalMemoryStatus
дает следующую информацию:
- dwTotalPhys - 1063150000 (~ 1 ГБ)
- dwAvailPhys - 26735000 (~ 27 МБ)
- dwAvailPage - 1489000000 (~ 1,4 ГБ)
Мне кажется странным, что Windows позволяла бы настолько уменьшать доступную физическую память, когда в файле подкачки доступно так много места, но я не знаю достаточно об управлении виртуальной памятью Windows, чтобы знать, нормально ли это или не. Это так?
Если не память, то какой ресурс ограничивается? Из того, что я читал в Интернете, ERROR_NOT_ENOUGH_MEMORY
может быть результатом того, что приложение нарушает любое из нескольких ограничений (объекты GDI, объекты USER, дескрипторы и т. д.) и не обязательно память. Существует ли исчерпывающий список ограничений, которые применяются Windows? Есть ли какой-нибудь способ узнать, какой лимит был достигнут? Я попробовал Google, но не смог найти систематического обзора.