Im Fall sein die Anordnung von statischer Dauer sein (globale Variable), würde ich sagen, die erste ist viel vorzuziehen, da sie keinen Code benötigt - sie wird von der Laufzeitumgebung initialisiert.
Wenn die Variable eine automatische Dauer hat (lokale Variable), welche davon besser ist, wenn die eine besser ist als die andere, hängt vom Compiler ab. Höchstwahrscheinlich werden sich beide sehr ähnlich sein.
Die Eigenschaft für die automatische Speicherdauer ist in allen Fällen O (n). Der erste Fall ist O (1) für eine statische Speicherdauervariable.
Natürlich, wenn Sie Array mit dem Wert 5, die zweite Option ist viel besser füllen wollten, weil es nicht 10000 5
in der Quelldatei zu schreiben erfordert.
Sie können auch finden, dass die Verwendung von memset(array, 0, sizeof(array));
ist besser als beide - wieder, je nach Compiler. Dies ist immer noch O (n), aber die tatsächliche Zeit, die zum Füllen des Arrays benötigt wird, kann kürzer sein, weil memset
möglicherweise besser optimiert ist als das, was der Compiler für Ihren Loop-Fall generiert [und was er für initialisierte Variablen tut]. memset
funktioniert nicht zum Füllen des Arrays mit 5
entweder.
Sie könnten auch std::fill(array, &array[10000], 5);
verwenden, um den Wert 5 im gesamten Array zu setzen, und der Compiler sollte einen guten Job haben, diesen zu optimieren.
Schließlich sollte ich darauf hinweisen, dass diese Art von Dingen nur dann wirklich wichtig ist, wenn sie in Code tun, der viel ausgeführt wird. Es ist lange her, dass 40KB Daten lange genug benötigt wurden, um sich wirklich um sich selbst zu kümmern. Wie 20+ Jahre.
Ist das 'Array' von statischer oder automatischer Dauer? –
Ich suchte nach beiden Situationen. –