Go Down

Topic: Übergabe von Variablen an Funktionen (Read 101 times) previous topic - next topic

freddy64

Hallo liebe Gemeinde,
wie verhält sich der Speicher bei der Übergabe von Variablen an Funktionen?

z.B. void machetwas(int value) {
.....
}

Wird hier eine Kopie von value im Speicher erstellt, oder der übergebene Speicherbereich der schon existierenden Variable value benutzt?

Gruß
Fred

combie

Das ist die klassische "Parameterübergabe per Value"
Und in dem konkreten Fall findet das in Registern statt.
Also nix mit Speicher.
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

freddy64

Besten Dank, aber bei Strings soll das angeblich anders sein, siehe hier

Dazu gleich noch eine Frage:

String a = "bla";
String b = "bla";
String c = "bla";
String d = "bla";

String s = "foo" + a + b + c + d;

oder doch

String s ="foo";
s += a;
s += b;
s += c;
s += d;

Nicht schimpfen wegen der Verwendung von Strings!!! Manchmal kommt man aber einfach nicht um den Datentyp herum.

combie

#3
Aug 24, 2019, 12:50 am Last Edit: Aug 24, 2019, 12:56 am by combie
Quote
Besten Dank, aber bei Strings soll das angeblich anders sein, siehe hier
Darum mein:
> Und in dem konkreten Fall findet das in Registern statt.

Quote
Dazu gleich noch eine Frage:
Sehe keine Frage!
Warum probierst du das nicht aus?



Code: [Select]
#include <Streaming.h> // findest du schon :-)

class PString: public String, public Print
{
  virtual size_t write(uint8_t value)
  {
    *this += static_cast<char>(value);
    return 1;
  }
};

int a,b,c,d;

void setup()
{
  PString s;
 
  Serial.begin(9600);
  Serial << "Start " << __FILE__ << endl;
 
  s << "foo" << a << b << c << d;
  Serial << s << endl;
}

void loop()
{
}
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

noiasca

Nicht schimpfen wegen der Verwendung von Strings!!! Manchmal kommt man aber einfach nicht um den Datentyp herum.
starke Ansage.
Arduino Strings sind nur "bequem". Im Prinzip muss dass alles durch c-strings auch schaffbar sein.
Signatur auf Pause

Serenifly

Besten Dank, aber bei Strings soll das angeblich anders sein,
Die musst zwischen elementaren Datentypen und Objekten unterscheiden. Es wird immer normalerweise nur eine Kopie erstellt.
Bei einfachen Variablen ist das i.d.R. ok. Aber ein String Objekt hat alleine schon 6 Bytes ohne das ein Inhalt drin steht (Kapazität, Länge und ein Zeiger auf den eigentlichen String).

Die String Klasse an sich ist kein Teufelswerk. Aber Anfänger haben keinerlei Ahnung wie man sie richtig einsetzt. Das sieht man immer sehr viel Unsinn. In dem Artikel werden da einige dieser Dinge gezeigt wie unnötige Kopien mit toCharArray(), Konkatenations-Orgien, oder dass niemand reserve() verwendet. Und die Übergabe an Funktionen als Wert gehört auch dazu.
Persönlich stört mich eher dass sie bei Formatierung und Konvertierung sehr limitiert ist

Go Up