bei call by value wird immer eine copie übergeben. das heisst i.d.r. mehr aufwand...
bei datenstrukturen, welche nicht auf das jeweilige prozessorregister optimiert sind (z.b. bei einer 8 bit maschine, mit einem 8 bit maschine, 1 int oder bei einer 16 bit maschine mit einem 16 bit compiler , 1 byte), kostet das dem prozessor meist zusätzliche taktzyklen.
bei call by reference, wird i.d.r. nur ein pointer auf die struktur übergeben, das war es. da es sich hierbei um die registergrösse handelt, mit der der prozssor am besten umgehen kann, beansprucht dies i.a.r. auch die wenigsten taktzyklen...
also, immer überlegen, ob man eine copie von einem datenbereich benötigt, und wie gross die daten denn wirklich sein sollen
wenn man ein neues programm beginnt, sollte man i.d.r. immer die nativen datentypen verwenden, welche auf dem prozessor angepasst sind... da diese i.d.r. am performantesten ablaufen. hat aber den nachteil, dass man von compilerversion und/oder prozessor andere datengrössen mit dem datentypen abbilden kann...