So ganz allgemein kann man das nicht sagen.
Für große Komposite (Struct, Union, ...) ist es auf jeden Fall besser,
per Zeiger/Referenz auf sie zuzugreifen, da ansonsten die kompletten
Daten kopiert werden mussen.
Ausserdem kann eine Aussage nicht allgemeingültig für alle
GCC-Ausprägungen gegeben werden, weil die Parameterübergabe abhängig von
der ABI ist. Zudem ist es nicht unwesentlich wie viele GPRs es auf der
Maschine gibt, für die übersetzt wird.
Für AVR ist es zB günstiger, Komposite mit 1, 2, und 4 Byte Größe (evtl.
auch 8 Byte) direkt zu übergeben. Das spart die Speicherzugriffe, die
ansonsten entstehen, weil man über den übergebenen Zeiger oder die
implizite übergeben Referenz auf die Daten zugreift.
Diese kleinen Komposite kann avr-gcc in Registern abhandelt, während es
für 6-Byte Größe nicht geht; eine solche Struktur mit "krummer"
Byte-Anzahl zu übergeben wird dazu führen, daß GCC sie im Frame anlegt,
d.h. er wird dann immer Speicherzugriffe machen müssen.
Um ein Gefühl dafür zu bekommen kann es durchaus lohnend sein, ein Blick
aufs erzeugte asm zu werfen.
Grüß, Johann