17. maj 2006 - 15:08Der er
4 kommentarer og 1 løsning
hvad er mest optimeret ?
void mymethod( const bool& b ) {} void mymethod( bool b ) {}
eller
void mymethod( string s ) {} void mymethod( const string& s ) {}
Hvis man ser på forskellen mellem optimering mellem const string & og string så burde det være en åbenlys optimering men hvad med const bool& i forhold til bool ?
En const string* s , vil også være optimerende, da den ikke skal til at oprette ekstra plads til en kopi. En refference er vel næsten det samme. Jeg ved ikke om du optimere særlig meget ved dit bool udtryk dog, da det er en primitiv type?! Ret mig endelig hvis jeg tager fejl.
I forhold til boolean så er spørgsmålet nok om der skal flere kald til at hoppe til den adresse som min const bool& ligger på i forhold til bare at kopierer en bool til toppen af stack'en som hvis metodn var deklararet til at bruge bool.
Det er korrekt at bruge en pointer eller reference til en kompleks type som string er (meget) mere effektivt, da du slipper for at kopiere strengen.
void mymethod( bool b ) {} Hvis b er den eneste parameter, vil b ofte bliver overført direkte i et register, og ikke på stakken. Hvis du kalder per reference, ligger adressen på b i samme register; og compileren vil skulle bruge en ekstra mov instruktion for at bringe værdien ind i et register, så der kan arbejdes med den.
Det du sparer i tilfældet med primitive typer; er så lidt at det ikke er værd at tænke over. Med komplekse typer, der indeholder meget data; kan der spares meget ved at tænke på om kaldet udføres by-value eller by-reference.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.