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
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.