Memory allocation for * bytes failed: причины и решения.

18.10.2018 0 Автор GodKnowses

Прогресс и маркетинг дарят компьютерному пользователю стабильность в ценах на компьютерные составляющие и всё более оптимальную в подходе к этим составляющим операционную систему. Однако некоторых пользователей даже сегодня продолжает настигать «ошибка 2000-х» в виде аварийно захлопнувшегося приложения с сообщением Windows Memory allocation for * bytes failed. Так почему на фоне нередко переизбытка установленной RAM и запредельного по размерам pagefile.sys эта ошибка всё ещё досаждает некоторым из нас?

Memory allocation for bytes failed

Проблема пришла к нам из тех времён, когда пользователи стали активно переходить с Windows XP на более современную Windows Vista и 7, пытаясь при этом сохранить прежнюю конфигурацию компьютера. Ошибка Memory allocation for * bytes failed — ни что иное как эхо ещё более коварной ошибки Unable to allocate memory, которая мучила владельцев «отстающих» сборок. Массовый переход производителей на 64-х битные версии процессоров, многоканальные проходы RAM решили проблему практически полностью. Однако…

СПРАВКА 

К сожалению, вследствие ограниченного перевода локализаций Windows, пользователь не всегда способен правильно оценивать обстановку. А на неё Windows нередко прямо и указывает. В нашем случае ошибка Memory allocation for * bytes failed говорит о том, что оперативной памяти в указанном размере было отказано в выделении для этого приложения. Это значит, что отвечающая за перераспределение памяти процедура Управления памятью (Memory Management) просто не справляется с обязанностями. Учитывая границы зависимости MM, которые включают и аппаратные компоненты компьютера (RAM, чипсет, тип хранилища — SSD) и уровень приложений (объекты и структуры данных), можно предположить, что корни проблемы именно у вас никогда уже не решатся переустановкой Windows.

Memory allocation for * bytes failed: аппаратные ограничения

Ниже следуют наиболее вероятные причины ошибки. Они налагаются со стороны именно физического уровня аппаратного обеспечения:

  • доступная системе память (не общий объём памяти в планках, а именно доступной Windows) — память забита другими приложениями; на вновь запущенное свободных блоков просто не хватает
  • ограничения в объёмах поддерживаемой памяти — планок RAM в компьютер можно напихать сколь угодно — но более 4 Гб 32-х битная версия не увидит. А ещё и встроенная видеокарта хочет кушать…
  • фрагментация оперативной памяти — сопредельные блоки оперативной памяти выделяются вылетающему приложению неэффективно

Чуть подробнее…

Доступная память — самое простое объяснение. Если объём требуемой памяти превышает объёмы установленной, запросу со стороны программы системой будет отказано. Конечно, Windows и другие ОС сами себе создали уловку: они считают, что общая память складывается из нескольких факторов:

  • Физическая память (видимые объёмы планок RAM)
  • Виртуальная память (выделяемая системой часть на жёстком диске/флешке, куда системой будет записываться информация по нехватке RAM и программам, ожидающим — swapfile+pagefile)
  • Свободная память из части общей RAM (памяти может быть много, но если она занята остальными процессами, приложению будет отказано в дополнительных блоках).

Этими показателями и объясняются очень многие «НО», из-за которых Windows не «отстёгивает» память, которую программа просит.

Memory allocation for * bytes failed: решения

  • выходите из фоновых приложений, закрывайте ненужные на данный момент программы; в Диспетчере задач — искомая вкладка Процессы:

процессы в диспетчере задач

добавить оперативную память

  • не экономьте на объёмах виртуальной памяти. Доверьте системе самой выбрать нужный. Но смысла задавать файл подкачки запредельных размеров тоже не вижу — это медленная память; выделяемые объёмы на диске просто погаснут перед маленькой скоростью обмена с жёстким диском. На SSD скорости буду по-интереснее, но всё равно это уже не совсем то…
  • если компьютер очень уж стар, а до планок RAM ещё нужно дойти, попробуйте Readyboost. Дешёвый способ попробовать подстегнуть память за счёт флешки. Для ветхих систем — это иногда настоящая палочка-выручалочка

ускорить работу компьютера 2

  • в то время, как место на диске для файла подкачки выставлено достаточно, на всякий случай одна из флешек в режиме Readyboost, захлопываем все приложения и отправляемся в Диспетчер задач, где выставляем приоритет выполнения для «проблемного» процесса максимальный до уровня, пока нестабильность системы не станет очевидна:

приоритет процесса

  • дефрагментация диска и регулярное удаление файлов pagefile.sys и swapfile.sys (по мере появления проблем с производительностью и ошибок RAM). Помните, что оба файла — это пространство жёсткого диска со всеми вытекающими проблемами: уже упомянутые медленные скорости обмена и почти мгновенная фрагментация файловой структуры.

Memory allocation for * bytes failed: ограничения со стороны системы

64-битная версия Тот случай, когда памяти много, а толку мало. Размер адресного пространства для конкретного процесса априори небольшой. Так память распределяется виртуальным Менеджером памяти, о котором мы уже упомянули: создаётся цепочка адресов памяти, которая связана с конкретным адресным пространством. А у адресного пространства всегда ограниченные границы значений. Так, для 32-х битных систем — это всегда лишь 4 Гб. Но это, вопреки обычному мнению, ещё и не весь предел накладываемым ограничениям. Системные адреса в процессе сеанса наносятся на адресное пространство, тем самым ещё более занижая свободное место. Так что порой, вопреки заявленным минимальным требованиям к «железу», операционная система Windows 7 (даже установленная «начисто»), например, оставит процессам не более 22,5 Гб оперативной памяти из 4-х Гб.

Memory allocation for * bytes failed: решения

И думать нечего: переходим на 64 бита. На всех платформах. А 32-х битные сборки пора перевозить в гараж. Тем более, у 64-х битных систем огромные преимущества в вопросах безопасности.

Memory allocation for * bytes failed: фрагментация памяти?

Отсюда начинается очень скользкая тема. Некогда популярные ремонтные утилиты нередко предлагали пользователям в числе прочего и такую функцию как дефрагментация оперативной памяти. Скользкая потому, что моё личное мнение таково: часто шкура выделки не стоит. При нормально работающей системе такие программы если не мешают, то просто бесполезны. На старых системах — да. С объёмом RAM 1,52 Гб — безусловно. Но сейчас даже смартфоны мощнее. И с такими характеристиками комфортно можно работать разве что в Windows Millenium.  В том виде, как эта проблема существовала, она современных пользователей (с, прежде всего, достаточным объёмом памяти) уже не касается (кому интересно — подробности в ссылке): она целиком и полностью ложится на плечи разработчиков. И даже принудительная фрагментация оперативной памяти самой Windows во время загрузки программы-тяжеловеса не должна вызывать ошибки Memory allocation for * bytes failed. Однако… Проверьте, не использует ли ваша «проблемная» программа библиотеку Microsoft Foundation Classes (MFC).

Memory allocation for * bytes failed: решения

В нашем случае единственное — обновите версию Framework до последней. Неважно, что хочет программа. Версия .NET Framework 4 должна быть установлена. И позаботьтесь о том, чтобы обновления к Windows приходили в вашу систему вовремя.

Ещё по теме:

memtest windows не удалось установить необходимые файлы Тестирование оперативной памяти с помощью memtest поможет вскрыть проблемы в связке «планка-оперативной-памяти -> слот DIMM». Если ошибки с RAM продолжают преследовать вашу ОС даже после переустановки, время пускать в ход тяжёлую артиллерию.

 

Успехов.