Forum: Mikrocontroller und Digitale Elektronik C: Sind Pointer wirklich schneller?


von Kermit (Gast)


Lesenswert?

Hallo!

Immer wieder höre und lese ich, dass man Pointer verwenden soll um das 
unnötig hin- und herkopieren von Daten zu vermeiden.
Allerdings verstehe ich nicht warum das so sein soll. Auf einer 
16bit-MCU ist ein Pointer ebenfalls 16bit, also 2 Byte groß. Wenn ich 
jetzt ein char (also 1 Byte) als Funktionsparameter hab, dann muss doch 
die MCU nur ein Byte kopieren und nicht zwei wie beim Pointer. Bei einem 
int16 hält es sich die Waage, bei einem float oder long, die 4 Bytes 
groß sind, mag der Pointer im Vorteil sein, ebenso bei Strukturen und 
Arrays.

Oder verstehe ich das falsch?

Viele Grüße
Kermit

von (prx) A. K. (prx)


Lesenswert?

Kermit schrieb:

> Oder verstehe ich das falsch?

Vermutlich. Wer hat denn in welchem Zusammenhang gesagt, dass man immer 
und überall Pointer verwenden soll?

Pointer als Parameter an Stelle von skalaren Daten und Rückgabewerten in 
Wort/Doppelwortgrösse ist nämlich tendentiell eher ineffizient.

Anders sieht es aus, wenn es um Structs geht. Da sind Pointer meist 
sinnvoller als die direkte Übergabe. Bei Arrays geht es in C ohnehin 
nicht anders.

von Loonix (Gast)


Lesenswert?

Kermit schrieb:
> Immer wieder höre und lese ich, dass man Pointer verwenden soll um das
> unnötig hin- und herkopieren von Daten zu vermeiden.

Das bezieht sich auf die Argument-Übergabe. Wenn du eine Struktur mit 
sagen wir mal 24 Byte an eine Funktion übergibst, werden die 24 Byte der 
Struktur auf den Stack kopiert. Um die echte Struktur zu verändern, muss 
dieser Datenbereich dann wieder zurück kopiert werden. Benutzt du aber 
einen Zeiger auf die Struktur, wird nur der Zeiger auf den Stack gelegt 
und im Funktionsrumpf kann die Struktur über den Zeiger manipuliert 
werden.

von neugerig (Gast)


Lesenswert?

guck mal noch auf Data alignment. Ist das 1B kopiert oder doch 2 weil 
16bit Prozzesor arbeitet effizienter mit 16bit Worten als kleinsten 
Daten Mengen?

von Frank M. (aktenasche)


Lesenswert?

korrigiert mich wenn ich falsch liege: aber wird bei der verwendung von 
pointer ueberhaupt was kopiert?

ich denke es kommt darauf an welche operationen die MCU in den 
registern, akku bzw. RAM ausfuehren kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.