ich vor kurzem erfahren, dass ich folgendes mit geben aa Struktur an eine Funktion in C tun können, ++:Effizienz einer Struktur an eine Funktion ohne eine lokale Variable Instanziierung
(Ich entschuldige mich für keinen passenderen Namen verwendet für können sie mich dieses „Feature“ in dem Titel, zu korrigieren)
#include <iostream>
typedef struct mystruct{
int data1;
int data2;
} MYSTRUCT;
void myfunction(MYSTRUCT _struct){
std::cout << _struct.data1 << _struct.data2;
}
int main(){
//This is what I recently learned
myfunction(MYSTRUCT{2,3});
return 0;
}
das macht mir Wunder, ist dies weniger kostspielig als ein lokales MYSTRUCT
Instanziieren und weitergeben als Wert an die Funktion? Oder ist es nur ein bequemer Weg, das Gleiche zu tun, nur dass die temporäre Variable gleich danach eliminiert wird?
Zum Beispiel das Hinzufügen dieser Zeile #define KBIG 10000000
, ist dies:
std::vector<MYSTRUCT> myvector1;
for (long long i = 0; i < KBIG; i++) {
myvector1.push_back(MYSTRUCT{ 1,1 });
}
Konsequent schneller als das:
std::vector<MYSTRUCT> myvector2;
for (long long i = 0; i < KBIG; i++) {
MYSTRUCT localstruct = { 1,1 };
myvector2.push_back(localstruct);
}
ich es testen versucht, aber die Ergebnisse waren ziemlich inkonsistent, schwebt etwa 9-12 Sekunden für jeden. Manchmal wäre der erste schneller, manchmal nicht. Dies könnte natürlich auf alle Hintergrundprozesse zum Zeitpunkt des Testens zurückzuführen sein.
Also ist die Schlussfolgerung, dass es keinen großen Leistungsunterschied gibt? Wenn Sie sicher wissen möchten, erstellen Sie mit aktivierter Optimierung und vergleichen Sie den generierten Code für beide Alternativen. –