Память Prefetch
Если ваши строки очень длинные, либо сделайте так, чтобы ваш компилятор сделал это, либо вручную разверните ваш цикл и вставьте в него команду предварительной выборки из памяти или две в каждой строке кэша.
Таким образом, пока процессор сканирует, контроллер памяти может вытягивать следующие строки данных.
Если вы сохранили длину строки при ее создании, вы можете пропустить все проверки для байта NUL, что означает, что вы можете развернуть свой цикл для работы с большими кусками и уменьшить количество операций сравнения и ветвления, хотя с Текущие предсказатели ветвей, честно говоря, не имеет большого значения.
Даже с отличными предикторами ветвления ЦП цикл будет замедляться, если ему придется каждый раз проверять счетчик цикла в цикле, чтобы решить, когда выполнять предварительную выборку из памяти, поэтому развертывание все еще полезно в этом случае.
Профилирующая обратная связь
Для обеспечения максимальной производительности ЦП необходимо правильно подсказывать ветки, и здесь обратная связь с профилированием оказывается очень полезной. В противном случае компилятор просто делает несколько обоснованное предположение.