История изменений
Исправление wandrien, (текущая версия) :
Понимаешь, так можно очень далеко зайти.
Например, в коде программы есть функция, которая сравнивает строки за время, пропорциональное длине одной из строк, а не время, пропорциональное числу байт до первого различия.
Это нужно, чтобы не было возможно провести атаку по времени.
Так вот. Имея доступ к коду функции и коду, который эту функцию вызывает, компилятор, теоретически, достаточно умён, чтобы понять смысл кода и заменить его на обычный strcmp(). Если текущий не достаточно умён, то будет достаточно умён через 10 лет.
Потому что «наблюдаемое поведение» не изменилось.
Но вся эта эквилибристика уже давно вышла за границу уместных оптимизаций в строну абстрактной акробатики над числами, оторванной от реального применения кода.
А в реальном коде оптимизация попроизводительности может нарушать фактическое (а не теоретическое) наблюдаемое поведение за здорово живёшь. Потому что программы исполняются в железе, а не в математических моделях.
Целый ворох аппаратных уязвимостей в CPU, дающих возможность анализа системы через паразитные каналы данных – тому пример.
Исходная версия wandrien, :
Понимаешь, так можно очень далеко зайти.
Например, в коде программы есть функция, которая сравнивает строки за время, пропорциональное длине одной из строк, а не время, пропорциональное числу байт до первого различия.
Это нужно, чтобы не было возможно провести атаку по времени.
Так вот. Имея доступ к коду функции и коду, который эту функцию вызывает, компилятор, теоретически, достаточно умён, чтобы понять смысл кода и заменить его на обычный strcmp(). Если текущий не достаточно умён, то будет достаточно умён через 10 лет.
Потому что «наблюдаемое поведение» не изменилось.
Но вся эта эквилибристика уже давно вышла за границу уместных оптимизаций в строну абстрактной акробатики над числами, оторванной от реального применения кода.
А в реальном коде оптимизация попроизводительности может наршуать фактическое (а не теоретическое) наблюдаемое поведение за здорово живёшь.
Целый ворох аппаратных уязвимостей в CPU, дающих возможность анализа системы через паразитные каналы данных – тому пример.