Wenn Sie diese als lokale Variablen in Funktionen zuweisen (was die einzige Stelle ist, an der direkt auf die Zeigerdeklaration ein malloc
-Aufruf folgt), besteht der Unterschied darin, dass malloc
einen Teil des Speichers reserviert aus dem Heap und geben Sie ihre Adresse, während direkt int arr[1048575];
wird versuchen, den Speicher auf dem Stapel zuzuordnen. Der Stapel hat viel weniger Platz zur Verfügung.
Der Stack ist aus zwei Gründen, die mir bekannt sind, in der Größe begrenzt:
Wenn Sie ein Array deklarieren, platzieren Sie es auf dem Stapel.
Wenn Sie malloc () aufrufen, wird der Speicher aus dem Heap übernommen.
Der Stapel ist normalerweise begrenzter als der Heap und ist normalerweise vorübergehend (aber er hängt davon ab, wie oft Sie die Funktion eingeben und verlassen, in der dieses Array deklariert ist.)
Für solch einen großen (vielleicht nicht nach heutigen Standards?) Speicher ist es eine gute Praxis, ihn zu malloc zu machen, vorausgesetzt, Sie möchten, dass das Array für ein bisschen durchhält.
Tags und Links c arrays memory-management local-variables