Je voulais comparer la fonction glibc
de strlen
pour une raison quelconque et j'ai découvert qu'elle fonctionne apparemment beaucoup plus lentement avec les optimisations activées dans GCC et je ne sais pas pourquoi.
Voici mon code:
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main() {
char *s = calloc(1 << 20, 1);
memset(s, 65, 1000000);
clock_t start = clock();
for (int i = 0; i < 128; ++i) {
s[strlen(s)] = 'A';
}
clock_t end = clock();
printf("%lld\n", (long long)(end - start));
return 0;
}
Sur ma machine, il sort:
$ gcc test.c && ./a.out
13336
$ gcc -O1 test.c && ./a.out
199004
$ gcc -O2 test.c && ./a.out
83415
$ gcc -O3 test.c && ./a.out
83415
D'une manière ou d'une autre, l'activation des optimisations le fait s'exécuter plus longtemps.