Форум Эму-Россия
http://forum.emu-russia.net/

Ошибка reserve memory
http://forum.emu-russia.net/viewtopic.php?f=25&t=5885
Страница 1 из 1

Автор:  Rayne [ 21 мар 2015, 20:52 ]
Заголовок сообщения:  Ошибка reserve memory

Эмулятор выдает ошибку "can't reserve 512 bytes of memory for the membase".
Ранее все работало отлично, но после какого-то глюка при запуске эмулятора вылетает ошибка. Перестановка дров, программ и даже системы не помогла(((
Как исправить, подскажите!

Автор:  CaH4e3 [ 22 мар 2015, 01:17 ]
Заголовок сообщения:  Re: Ошибка reserve memory

выключить нового касперского лол

Автор:  Rayne [ 22 мар 2015, 12:11 ]
Заголовок сообщения:  Re: Ошибка reserve memory

Не помогает, с выключенным антивирусом проблема та же(((

Автор:  Wind [ 22 мар 2015, 13:02 ]
Заголовок сообщения:  Re: Ошибка reserve memory

Видимо он все же не выключается или действительно очень мало памяти.

Автор:  CaH4e3 [ 22 мар 2015, 13:46 ]
Заголовок сообщения:  Re: Ошибка reserve memory

Rayne писал(а):
Не помогает, с выключенным антивирусом проблема та же(((

подробности тут http://code.google.com/p/demul/issues/d ... colspec=ID Type Status Priority Reporter Owner Summary
и тут http://www.emu-land.net/forum/index.php ... msg1109061

Автор:  Rayne [ 24 мар 2015, 00:33 ]
Заголовок сообщения:  Re: Ошибка reserve memory

Спасибо!

Автор:  AntZ [ 25 мар 2015, 19:39 ]
Заголовок сообщения:  Re: Ошибка reserve memory

Rayne, можешь попробовать скачать с сайта microsoft утилиту VMMap. Она позволяет исследовать виртуальное адресное пространство процессов. Натрави её на Demul во время воспроизведения ошибки. Обрати внимание на вот это число:

Вложение:
1.png
1.png [ 29.51 КБ | Просмотров: 5372 ]


Оно показыват самый большой непрерывный свободный блок в адресном пространтсве процесса. Если оно меньше 524 288, то значит адресное пространтсво процесса с Demul неудачным образом фрагментировано и выделить блок нужного размера невозможно. Не потому что мало памяти, а потому что блок размером 512 Mb просто некуда впихнуть в адресное пространство процесса.

На фрагментацию процесса влияют множество факторов: то, каким образом сам Demul запрашивает память, то как Windows решит её в данный момент выдать, то как Windows решит разместить DLL-ки в адресном пространстве процесса, и прочее другое. Также, очень часто антивирусы и файрволы инжектят свои DLL-ки в пользовательские процессы, что может вызывать дополнительную фрагментацию. Но это делают не только антивирусы и файрволы. Вот пример:

Вложение:
2.png
2.png [ 64.33 КБ | Просмотров: 5372 ]


Тут можно наблюдать как словарь Lingvo нагло вторгся в чужой процесс, причём сделал это самым нахальным способом, разделив диапазон свободных адресов размером 1.2 G почти пополам: на блок ~534M и ~781M. Совершенно непонятно, почему он решил влезть именно в середину самого большого блока, но совершенно очевидно, что ещё парочка вот таких Lingvo посреди блоков 534 и 781 M и о запуске Demul можно забыть.

Вот как вся эта прелесть выглядит в общем виде:

Вложение:
3.png
3.png [ 16.31 КБ | Просмотров: 5372 ]


Чёрная полоска посередине это и есть тот самый Lingvo. Вверху блок 534M, внизу - 781M. Можешь покопаться в своём процессе Demul и посмотреть, кто именно вызывает фрагментацию.

А вообще, вопрос к разработчикам Demula, зачем им понадобился непрерывный блок памяти размером в 512M. Это нужно для эмуляции, или вы просто сразу берёте памяти сколько нужно, потому что боитесь, что Винда вам потом её не даст лол? Для 32-х битных процессов 512M это довольно дохрена. Размер адресного пространства 32-х битных процессов в Винде по умолчанию равен двум гигабайтам: https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366912(v=vs.85).aspx. Остальные 2 Гига это адреса ядра, как я понял . Это значит, что достаточно 4 аллокации в ненужных местах, и свободного блока размером в 512M уже нет. Можно попробовать включить фичу 4-Gigabyte Tuning, тогда адресов для процесса будет уже на 3 Гига. Возможно, это один из вариантов решения проблемы.

При таком раскладе, возможно, имеет-таки смысл поддерживать 64-битную версию, в которой по идее таких проблем быть не должно. Или таки не жадничать, и просить у Винды по чуть-чуть.

ЗЫ Если что, процесс на моих картинках это не Demul, а просто первый попавшийся 32-битный.

Автор:  Rayne [ 25 мар 2015, 23:28 ]
Заголовок сообщения:  Re: Ошибка reserve memory

AntZ, огромное спасибо!!! Теперь мне наконец понятно из-за чего данная проблема образовалась. На выходных буду решать)))

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/