Быстрее уже не бывает... #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> int main (void) { const char *a = "Маша", *b = "мыла", *c = "раму!"; const int count = 1e5; const int strlength = count * (strlen (a) + strlen (b) + strlen (c)); char *string = (char*) malloc (strlength + 1); if (!string) return 1; char *ptrcur = string, *ptrstop = string + strlength; struct timeval begin, end; gettimeofday(&begin, NULL); while (ptrcur < ptrstop) ptrcur = stpcpy (stpcpy (stpcpy (ptrcur, a), b), c); gettimeofday(&end, NULL); long elapsed_ms = (end.tv_sec - begin.tv_sec) * 1000 + (end.tv_usec - begin.tv_usec) / 1000; printf ("Результат: %.50s за %ld мс.\n", string, elapsed_ms); free (string); return 0; } $ uname -p Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz $ gcc -O1 add.c && ./a.out Результат: Машамылараму!Машамылараму! за 1 мс. gcc -O0 add.c && ./a.out Результат: Машамылараму!Машамылараму! за 6 мс. При -O1 цикл компилируется в набор инструкций movabsq $-5705910293682414384, %rdi movabsq $-5705854223505048368, %rsi movabsq $-8948163380102790959, %rcx .L5: movq %rdi, (%rax) movq %rsi, 8(%rax) leaq 16(%rax), %rdx movq %rcx, (%rdx) movw $33, 8(%rdx) addq $25, %rax cmpq %rax, %rbx ja .L5 Быстрее уже не бывает... Отсюда вывод: чем ниже уровень ЯП, тем выше скорость программы при прочих равных условиях.
|