C: Sind Pointer wirklich schneller?

Gast #2259819
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
#2259821
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.
Gast #2259827
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren