Ich umformuliere diese Frage basierend auf den eingegangenen Kommentaren.Warum läuft C-Programm langsamer, wenn eine Schleife eine Bedingung enthält
Ich habe eine Schleife, die 30 Milliarden Mal läuft und weist einem Speicherbereich, der mit malloc() zugewiesen wurde, Werte zu;
Wenn die Schleife eine Bedingung enthält, läuft sie viel langsamer als wenn die Bedingung nicht vorhanden ist. Überprüfen Sie die folgenden Szenarien:
Ein Szenario: Zustand vorhanden ist, und das Programm ist langsam (43 sec)
Szenario B: Zustand nicht vorhanden ist und das Programm ist viel schneller (4 sec)
// gcc -O3 -c block.c && gcc -o block block.o
#include <stdio.h>
#include <stdlib.h>
#define LEN 3000000000
int main (int argc, char** argv){
long i,j;
unsigned char *n = NULL;
unsigned char *m = NULL;
m = (unsigned char *) malloc (sizeof(char) * LEN);
n = m;
srand ((unsigned) time(NULL));
int t = (unsigned) time(NULL);
for (j = 0; j < 10; j++){
n = m;
for (i = 0; i < LEN; i++){
//////////// A: THIS IS SLOW
/*
if (i % 2){
*n = 1;
} else {
*n = 0;
}
*/
/////////// END OF A
/////////// B: THIS IS FAST
*n = 0;
i % 2;
*n = 1;
/////////// END OF B
n += 1;
}
}
printf("Done. %d sec \n", ((unsigned) time(NULL)) - t);
free(m);
return 0;
}
Grüße, KD
Ohne jeden Kontext können wir nur raten. Eine Vermutung ist, dass die 0 als Abschlusszeichen für eine Zeichenfolge verwendet wird, aber wie gesagt, wir brauchen einen Kontext. – Gerhardh
Die Hellseherabteilung ist im Mutterschutz. Alle Fragen zu nicht funktionierendem Code müssen von einem [mcve] begleitet werden. Das Management möchte sich für die entstandenen Unannehmlichkeiten entschuldigen. –
Veröffentlichen Sie einen minimalen vereinfachten Code, den wir ausführen und kompilieren können. Und wenn du recht hast, sage ich viel Abstimmung voraus. –