Однажды коллега рассказал историю из тех времён, когда Windows включала эмулятор процессора для x86-32 на системах, работавших на другом процессоре. Эмулятор использовал двоичную трансляцию — генерировал нативный код, эквивалентный исходному x86-32. Это давало серьёзный прирост скорости по сравнению с интерпретатором. По сути, x86-32 выступал как байт-код, а эмулятор работал как JIT-компилятор.
В какой-то программе требовалось выделить ~64KB памяти на стеке и проинициализировать её. Стандартный способ: сделать stack probe (проверить, что 64KB доступно), вычесть 65536 из указателя стека, а затем инициализировать память небольшим компактным циклом. Но компилятор, которым собирали эту программу, решил «оптимизировать» код. Вместо цикла он развернул его в 65 536 отдельных инструкций «записать байт в память». Каждая такая инструкция занимала 4 байта.
Итог: программа использовала 256 килобайт кода, чтобы инициализировать 64 килобайта данных. Разработчиков эмулятора это настолько возмутило, что они добавили специальный код в транслятор. Он обнаруживал эту ужасную функцию и заменял её на эквивалентный компактный цикл.