2014-02-28 3 views
2

Пока я читал исходный код glibc, я нашел этот интересный комментарий в strcat.c. Может ли кто-нибудь объяснить, как работает эта оптимизация?Приращение переменной при чтении памяти

/* Make S1 point before the next character, so we can increment 
     it while memory is read (wins on pipelined cpus). */ 
     s1 -= 2; 

     do 
     { 
      c = *s2++; 
      *++s1 = c; 
     } 
     while (c != '\0'); 
+0

Скомпилируйте и objdump это откроет все чудеса. : D – Stolas

ответ

1

Конвейерные процессоры могут выполнять некоторые функции параллельно. Например, он может увеличивать адрес S1 при чтении с адреса, на который он указывал.

0

Это просто означает, что приращение s1 может быть выполнено, когда символ извлекается из *s2, поэтому он бесплатный.

Смежные вопросы