Это оптимизация - для очень маленьких строк простое копирование выполняется быстрее, чем вызов системной (libc) функции копирования.
Простое копирование с циклом while
работает довольно быстро для коротких строк, а функция системного копирования имеет (как правило) оптимизацию для длинных строк. Но также системное копирование выполняет много проверок и некоторые настройки.
На самом деле перед автором есть комментарий автора: nginx, /src/core/ngx_string.h (search ngx_copy)
/*
* the simple inline cycle copies the variable length strings up to 16
* bytes faster than icc8 autodetecting _intel_fast_memcpy()
*/
Кроме того, верхняя строка из двух строк -
#if ( __INTEL_COMPILER >= 800 )
Итак, автор сделал измерения и пришел к выводу, что оптимизированная ICC memcopy выполняет долгую проверку ЦП, чтобы выбрать наиболее оптимизированный вариант memcopy. Он обнаружил, что ручное копирование 16 байт быстрее, чем самый быстрый код memcpy из ICC.
Для других компиляторов nginx использует ngx_cpymem
(memcpy) напрямую
#define ngx_copy ngx_cpymem
Автор провел исследование различных memcpy
s для разных размеров:
/*
* gcc3, msvc, and icc7 compile memcpy() to the inline "rep movs".
* gcc3 compiles memcpy(d, s, 4) to the inline "mov"es.
* icc8 compile memcpy(d, s, 4) to the inline "mov"es or XMM moves.
*/