Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Ну и о эпичном фиксе для SimCity, которая имела привычку использовать память после вызова GlobalFree наверное все слышали.
Об этом случае я узнал от одного из разработчиков SimCity: в их коде был баг, из-за которого программа обращалась к блокам памяти сразу же после их освобождения. Понятно, что так делать нельзя, но под DOS это работало, потому что некому было использовать только что освобождённую память под что-то другое: SimCity была единственной в системе запущенной программой.
В Windows, когда одновременно запущено несколько программ, освободившаяся память тут же занимается кем-то другим, и SimCity падала. Когда тестеры Windows проверяли совместимость разных популярных программ с новой ОС, они обратили внимание, что SimCity то и дело падает, и сообщили об этом разработчикам Windows.
Разработчики Windows принялись отлаживать SimCity, чтоб определить причину падений, и нашли в ней этот баг. Тогда они добавили в Windows специальный код, который проверял, запущена ли SimCity, и если запущена — то изменял алгоритм выделения памяти так, чтобы только что освобождённую память можно было продолжать использовать.
Управление памятью в реальном режиме Windows