Stack-Allokation
Verstehen, wie automatische Speicherung funktioniert
Stack-Allokation ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Automatischer Speicher
Lokale Variablen liegen im automatischen Speicher, der üblicherweise als Stack bezeichnet wird. Sie werden erstellt, wenn die Ausführung ihren Gültigkeitsbereich betritt, und zerstört, wenn sie ihn verlässt.
#include <iostream>
int main() {
int x = 42; // on the stack
double pi = 3.14; // on the stack
std::cout << x << " " << pi << "\n";
}Der Stack wächst und schrumpft
Jeder Funktionsaufruf legt einen Stack-Frame mit seinen lokalen Variablen ab. Wenn die Funktion zurückkehrt, wird der Frame entfernt und die lokalen Variablen verschwinden – eine manuelle Bereinigung ist nicht erforderlich.
#include <iostream>
void greet() {
int local = 7; // pushed on call
std::cout << local << "\n";
} // popped on return
int main() { greet(); }LIFO-Reihenfolge
Der Stack arbeitet nach dem Prinzip Last In, First Out. Die zuletzt erstellte lokale Variable wird beim Ende des Gültigkeitsbereichs zuerst zerstört.
#include <iostream>
int main() {
int a = 1;
{
int b = 2; // created after a
std::cout << b << "\n";
} // b destroyed first
std::cout << a << "\n";
}Schnell und kostengünstig
Die Stack-Allokation ist äußerst schnell: Es wird lediglich der Stack-Zeiger verschoben. Es ist keine Suche nach freiem Speicher und keine für den Heap erforderliche Verwaltungsarbeit nötig.
Der Gültigkeitsbereich bestimmt die Lebensdauer
Ein Stack-Objekt ist nur innerhalb des Blocks gültig, in dem es deklariert wurde. Verschachtelte Blöcke haben ihren eigenen Gültigkeitsbereich.
#include <iostream>
int main() {
for (int i = 0; i < 3; ++i) {
int square = i * i; // recreated each iteration
std::cout << square << "\n";
}
}Begrenzte Größe
Der Stack hat eine feste, begrenzte Größe (oft einige Megabyte). Das Anlegen großer Arrays auf dem Stack kann zu einem Absturz durch Stack Overflow führen.
// Risky: a large fixed array on the stack
int big[1000000]; // may overflow the stackEine Stack-Adresse zurückzugeben ist ein Fehler
Geben Sie niemals einen Zeiger oder eine Referenz auf eine lokale Variable zurück. Sobald die Funktion zurückkehrt, ist dieser Speicher verschwunden und der Zeiger hängt ins Leere.
int* bad() {
int local = 5;
return &local; // BUG: local dies here
}Große Objekte per Referenz übergeben
Große Objekte auf den Stack zu kopieren, ist ineffizient. Übergeben Sie sie als const&, um das Kopieren zu vermeiden und den Stack-Verbrauch gering zu halten.
#include <string>
void print(const std::string& s) { // no copy
// use s
}Stack-Objekte benötigen kein delete
Da der Compiler ihre Lebensdauer automatisch verwaltet, dürfen Sie niemals delete für eine Stack-Variable aufrufen.
#include <iostream>
int main() {
int n = 10;
// delete &n; // ERROR: not heap-allocated
std::cout << n << "\n";
}Arrays auf dem Stack
Arrays mit fester, bekannter Länge liegen auf dem Stack und werden automatisch freigegeben, sobald der Gültigkeitsbereich endet.
#include <iostream>
int main() {
int values[3] = {10, 20, 30};
for (int v : values) std::cout << v << "\n";
}Wann Sie den Stack bevorzugen sollten
Bevorzugen Sie den Stack für kleine, kurzlebige Objekte, deren Größe zur Compile-Zeit bekannt ist. Er ist schneller und räumt sich selbst auf – verwenden Sie den Heap nur, wenn Sie ihn wirklich benötigen.
Kurze Überprüfung
Testen Sie Ihr Verständnis der Stack-Allokation.
Zusammenfassung
Sie haben gelernt, dass die Stack-Allokation automatische Speicherung verwendet, die an den Gültigkeitsbereich gebunden ist: Variablen werden beim Eintritt erzeugt und beim Verlassen in LIFO-Reihenfolge zerstört. Sie ist schnell, räumt sich selbst auf und ist in ihrer Größe begrenzt. Geben Sie niemals die Adressen lokaler Variablen zurück und verwenden Sie niemals delete für Stack-Objekte.
Häufig gestellte Fragen
Ist die Lektion „Stack-Allokation“ kostenlos?
Ja — der vollständige Text von „Stack-Allokation“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Stack-Allokation“?
Verstehen, wie automatische Speicherung funktioniert Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Stack-Allokation“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.