Способ реализации:
Версия Warcraft:
Небольшой патч war3.exe, позволяющий использовать до 4GB оперативной памяти. (В теории, на практике же я поймал вылет на ~3.5GB).
Реализовано при помощи включения флага Large Address Aware в заголовке WinPE, что помогает избежать резервирования памяти для ядра из доступных 32-битному приложению четырех гигабайт. Поддерживается только патч 1.26а, но теоретически можно так же пропатчить ехе и более поздних патчей, если близард это не сделали самостоятельно
Скопировать в папку с игрой с заменой, предварительно сделайте резервную копию вашего exe
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
11
Когда игра фаталит из-за утечек, это гипотетически должно помочь? (смогу проверить только через пару недель)
34
Хм. У меня как раз проблема в 1.26. Из-за утечек игра в ошибку уходит. Мб поможет.
16
PUVer, в случае утечек это же костыль - рано или поздно все равно случится краш.
24
Ydav, но теоретически это отсрочит его по времени в 3 раза, это вполне может быть сильно дольше средней игровой сессии
24
PUVer, Slonick, я не откажусь от тестов, в моем случае это помогло, я использовал утечную функцию в цикле и оставил на пару часов для теста, в случае оригинального ехе, вылет был на полтора гигабайтах примерно
13
Всем привет можно сделать как-то больше типа 8 или 16 гигов оперативной памяти...
19
Связные списки варкрафта оптимизированы с учетом доступности лишь первых 2 ГБ памяти. Если после разблокировки второй половины из неё будет выделен фрагмент для такого списка, то стоит ждать непредсказуемых последствий: случайные повреждения памяти, фатальные ошибки из-за обращений к недоступной памяти.
24
IceFog, я делал для того что бы подключенная библиотека RenderEdge могла использовать больше памяти для своих кешей,а не игровых данных. С игровыми, да, но я не смог найти ни прототипов объектов, ни адресов функций которые с ними работают - если есть какая-то информация на это счет, прошу сообщить - алгоритмы можно попробовать переписать на современный стандарт.
Единственное что точно корректно работает из оригинальных игровых объектов - это количество юнитов на карте их максимальное количество возросло без крашей. Перегружать другие типы объектов я не пробовал
19
darkowlom, связной список варкрафта является шаблонным типом из C++, так что для каждого варианта этого типа генерируется новый набор кода. Поэтому недостаточно найти одно место в коде и пропатчить его — необходимо найти все сгенерированные реализации, сколько бы их там ни было (кто знает сколько их там тысяч).
Вот тебе для примера краш одного игрока, который, как я полагаю, использовал подобный патч:
This application has encountered a critical error:

FATAL ERROR!

Program:	D:\wc3\Warcraft III 1.26a LTD\War3.exe
Exception:	0xC0000005 (ACCESS_VIOLATION) at 0023:6F7C4BC2

The instruction at '0x6F7C4BC2' referenced memory at '0x7DB1FF4F'.
The memory could not be 'written'.
Вот как выглядит это место в коде игры:
До инверсии число 0x7DB1FF4F было указателем 0x824E00B0, который как раз находится в верхней половине памяти, которая обычно недоступна.
После того как связной список наткнулся на это место, произошел краш из-за попытки записи в недоступную память.
Это еще повезло, что неудалось произвести запись, а иначе можно было перезаписать случайную память и затем недоумевать, почему в карте творится всякая чертовщина.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.