По соображениям производительности реализации стандартных строковых функций часто обрабатывают данные в естественно выровненных блоках ширины регистров. Это может привести к доступу чтения к концу исходных объектов данных, но выравнивание гарантирует, что код ведет себя точно так же, как наивная реализация в отношении исключений памяти. Каждый широкий доступ содержится в одной странице, и никакие страницы не затрагиваются, что также не затрагивается байт-мудрой реализацией.
Я бы утверждал, что такие реализации охватываются правилом C как-будто, то есть они ведут себя так же, как если бы они следовали абстрактным функциональным спецификациям.
Примером такой оптимизированной реализации будет OpenSolaris's strcmp()
for SPARC v8. Это код, который я написал пятнадцать лет назад, а также другие строковые функции, оптимизированные по производительности.
Различные инструменты проверки памяти будут жаловаться на такой код, однако, поскольку его использование может привести к доступу за пределы выделенного объекта данных, хотя доступ к чтению без ограничений безвреден по дизайну.
Крепость неправильная. По крайней мере, для правильной, это стандартная соответствующая реализация 'strncmp()'. – alk
Если я не очень сильно ошибаюсь, 'strncmp()' нужно будет сравнить только один символ 'char' от каждой строки в вашем примере. Я второй ложный положительный. – EOF
Просьба указать [mcve] и посмотреть [ask]. Это будет включать параметризацию Fortify. Или спросите HP, почему он генерирует ложные данные с необходимой информацией. – Olaf