Heim >Backend-Entwicklung >C++ >Können Arrays variabler Größe auf dem Stapel in C zugewiesen werden?
Arrays variabler Größe auf dem Stapel: Entlarvung eines Programmiermythos
Das Konzept von Arrays mit zur Laufzeit bestimmten Größen gilt seit langem als a Programmiertabu, insbesondere in C . Es ist allgemein bekannt, dass nur Konstanten die Größe automatischer und statischer Arrays definieren können. Ein aktueller Codeausschnitt stellt diese Annahme jedoch in Frage.
Betrachten Sie den folgenden Code:
int main(int argc, char **argv) { size_t size; cin >> size; int array[size]; ... }
Obwohl es keine dynamischen Speicherzuweisungsoperatoren wie new oder malloc gibt, wird dieser Code ohne kompiliert und ausgeführt Fehler. Wie ist das möglich?
Der Schlüssel liegt im C99-Standard, der die Unterstützung für Arrays variabler Größe auf dem Stapel einführte. In diesem Fall weist der Compiler das Array auf dem Stapel dynamisch zu, genau wie es bei einem Array mit konstanter Größe der Fall wäre, das als int array[100] deklariert ist.
Es ist wichtig zu beachten, dass sich dies grundlegend von der Heap-Zuweisung unterscheidet mit malloc oder new. Insbesondere GCC weist das Array auf dem Stapel zu und ändert den Stapelzeiger entsprechend. Dadurch entfällt die Notwendigkeit einer Heap-Zuweisung und ähnelt dem Verhalten der _alloca-Funktion.
Während dieses Konstrukt in älteren Compilern nicht unterstützt wird, wird es in modernen C-Implementierungen immer häufiger eingesetzt. Es bietet eine bequeme und effiziente Möglichkeit, Arrays mit bekannten Größen zur Laufzeit zuzuweisen.
Das obige ist der detaillierte Inhalt vonKönnen Arrays variabler Größe auf dem Stapel in C zugewiesen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!