frage zu arraydeklaration
-
Warum besteht folgender fehler:
unsigned short arr[250000000]; //array mit 250 Mio elementen unsigned short* zeiger=&arr[0]; int main() { unsigned short arr2[250000000]; //array mit 250 Mio elementen unsigned short* zeiger2=&arr[0]; *zeiger = 5; // O.K. Kein Fehler *zeiger2 = 5; // Fehler: Kein Kompilierfehler aber Programm stürzt während der Laufzeit ab }Es scheint so, dass die maximale Arraygröße bei ca. 250Mio liegt, wenn das Array außerhalb einer Funktion deklariert wurde.
Wurde das Array allerdings in einer Funktion deklariert, stürzt das Programm ab, wenn es mehr als ca. 10Mio Elemente bestitz.Ist das eine Eigenart meines Compilers (CodeBlocks GNU mingw32) oder hat das einen bestimmten Grund?
-
Globale Variablen liegen meist woanders als automatische Variablen. Wenn du das Array auf dem Heap anlegst (z.B. mit std::vector<short> vec(...)) wirst du wahrscheinlich auch andere Grenzen finden.
-
...und weiterhin ist der Stack, also der Ort wo das Array in main abgelegt wird, begrenzt. Oft auf zwei oder vier MB oder sowas. Das kannst Du in den Compileroptionen ändern, macht aber selten Sinn.