Я по какой-то причине хотел strlen
функцию glibc
strlen
и обнаружил, что она работает намного медленнее с включенной оптимизацией в GCC, и я понятия не имею, почему.
Вот мой код:
#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;
}
На моей машине это выводит:
$ 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
Каким-то образом включение оптимизаций заставляет его выполняться дольше.