Casten, Initialisieren, Stack, Heap; was gehört zu was?
-
Hallo,
ich hätte eine kleine Frage zum Casten und zum Initialisieren:
(int)x; // casten int(x); // initialisierenIst das so richtig? Aber meine Hauptfrage ist eigentlich: "Was wird auf den Stack- und was wird auf den Heap geschrieben?"
-
stack = lokal angelegt variabeln in einer funktion /block
heap= global auf dem arbeitsspeicher abgelegte daten!
-
int x = 5; ist auch initialisieren (=also einer Variable einen Initialwert zuweisen).
Auf dem Heap landet alles, was dynamisch alloziiert wurde, also mit new.
int* p = new int;sonst wirds auf dem Stack abgelegt.
-
wobei der zeiger (adresse) bei
int* p = new int;auch aufm stack liegt der wert an sich aufm heap
-
LukasBanana schrieb:
Ist das so richtig?
An sich ja, auch wenn man unter C++ die C-Casts eher nicht machen sollte. In sauberen C++ nimmt man eigentlich die Kastoperatoren static_cast. dynamic_cast...
double d1 = 4.3; int i1 = (int)d1; // C-Stil Cast int i2 = static_cast<int>(d1); // C++ EntsprechungLukasBanana schrieb:
Aber meine Hauptfrage ist eigentlich: "Was wird auf den Stack- und was wird auf den Heap geschrieben?"
Nach der Frage gehe ich mal davon aus das der Unterschied als solcher schon bekannt ist. Auf den Stack werden z.B. lokale Variablen abgelegt die keine dynamische Speicherallozierung haben. Auf dem Heap landen die Objekte die dynamisch alloziert werden (new, alloc...). Wobei der Zeiger selber eine lokale Variable sein kann.
class A {/*...*/}; int main() { A a; // Objekt auf dem Stack A* pa = new A(); // Zeiger auf dem Stack, Objekt auf dem Heap delete pa; }cu André
-
Wisst ihr was da schneller ist?
ist schreib`s nähmlich immer so:
float X = 0.0; MyFunction(int(X));oder ist das schneller?
float X = 0.0; MyFunction((int)X);
-
geht der erste fall überhaupt`?
-
Okay, alles klar.
Danke
-
BorisDieKlinge schrieb:
geht der erste fall überhaupt`?
Na klar, probier`s mal aus

-
@LukasBanana:
Es wird beides gleich schnell sein.