Im ersten Fall a
selbst besetzt sizeof(int *)
Bytes des automatischen Speichers, und das zeigt auf 10 * sizeof(int)
Bytes des dynamischen Speichers.
Im letzten Fall belegt b
10 * sizeof(int)
Bytes des automatischen Speichers. Da b
ein Array ist, gibt es keinen Zeiger.
Also der erste Fall verwendet mehr Gesamt-Bytes, aber weniger auf dem Stapel (vorausgesetzt, ein Stapel wird für die automatische Speicherung verwendet).
Wenn die Gesamtzahl der verwendeten Bytes relativ klein ist, ist der automatische Speicher normalerweise in Ordnung. Bei größeren Mengen ist dynamischer Speicher vorzuziehen. Insbesondere bei Stack-Implementierungen kann der Stack überlaufen, wenn zu viele automatische Variablen zu groß sind.
Es kann oder darf keinen Speicher im Stapel für den Zeiger '* a' zuweisen, abhängig davon, wie der Compiler funktioniert. Wenn du '& a' irgendwo verwendest, ja, ansonsten sind alle Wetten deaktiviert. –
Danke. Ich werde meine Antwort verbessern. – giusti
@DietrichEpp Noch einmal lesen, ich habe vielleicht Ihren Kommentar missverstanden. Können Sie mir ein konkretes Beispiel geben? – giusti