Самомодифицирующийся код не следует воспринимать легкомысленно, но иногда он может принести большой выигрыш в производительности. Если вы программировали очень долго, вы, вероятно, использовали это, не осознавая этого.
До широкого использования 486 и выше, многие ПК не имели аппаратной поддержки с плавающей точкой. В результате люди, пишущие программы с плавающей запятой, сталкиваются с дилеммой. Если они скомпилируют свою программу для использования встроенных инструкций с плавающей запятой, она будет работать быстро на машине с процессором с плавающей запятой, а вовсе не на машинах без таковой. Если они скомпилируют свою программу с программной эмуляцией с плавающей запятой, она будет работать на всех машинах, но медленно даже на машинах с аппаратной плавающей запятой.
Многие библиотеки компиляторов использовали интересный трюк с самоизменяющимся кодом. Поведение по умолчанию заключалось в том, чтобы поместить команду прерывания, где была необходима операция с плавающей запятой. Обработчик прерываний будет либо эмулировать инструкцию в программном обеспечении, либо, если он обнаружит, что она выполняется на машине с аппаратным обеспечением с плавающей запятой, он изменит код, заменив инструкцию перехвата соответствующей аппаратной инструкцией с плавающей запятой, и выполнит ее. В результате появилось программное обеспечение, которое работало на всех машинах и работало почти так же быстро на машине с аппаратным обеспечением с плавающей запятой, как если бы код был скомпилирован для непосредственного использования аппаратного обеспечения с плавающей запятой (поскольку большинство интенсивных операций с плавающей запятой происходят в циклах, которые выполняются много раз ).