Der folgende Code gibt mir einen Segmentierungsfehler, wenn er auf einem 2-GB-Computer ausgeführt wird, funktioniert jedoch auf einem 4-GB-Computer.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
Die Größe des Arrays beträgt nur 4 MB. Gibt es eine Begrenzung für die Größe eines Arrays, das in c ++ verwendet werden kann?
c++
arrays
segmentation-fault
Mayank
quelle
quelle
In C oder C ++ werden lokale Objekte normalerweise auf dem Stapel zugewiesen. Sie weisen dem Stapel ein großes Array zu, das mehr als der Stapel verarbeiten kann, sodass Sie einen Stapelüberlauf erhalten.
Ordnen Sie es nicht lokal auf dem Stapel zu, sondern verwenden Sie stattdessen einen anderen Ort. Dies kann erreicht werden, indem das Objekt entweder global gemacht oder dem globalen Heap zugewiesen wird . Globale Variablen sind in Ordnung, wenn Sie die von keiner anderen Kompilierungseinheit verwenden. Um sicherzustellen, dass dies nicht versehentlich geschieht, fügen Sie einen statischen Speicherspezifizierer hinzu, andernfalls verwenden Sie einfach den Heap.
Dies wird im BSS-Segment zugeordnet, das Teil des Heaps ist:
Dies wird im DATA-Segment zugeordnet, das ebenfalls Teil des Heaps ist:
Dies wird an einer nicht angegebenen Stelle im Heap zugewiesen:
quelle
delete
überall dort , wo Sie zuweisennew
. Wenn Sie jedoch sicher sind, dass Sie den Speicher nur einmal zuweisen (wie in main), wird er strikt nicht benötigt - der Speicher wird am Ausgang von main garantiert auch ohne explizite Freigabe freigegebendelete
.Wenn Sie in den meisten UNIX- und Linux-Systemen ausgeführt werden, können Sie die Stapelgröße vorübergehend mit dem folgenden Befehl erhöhen:
Aber seien Sie vorsichtig, Speicher ist eine begrenzte Ressource und mit großer Kraft gehen große Verantwortlichkeiten einher :)
quelle
In diesem Fall wird Ihr Array auf dem Stapel zugewiesen. Versuchen Sie, mithilfe von alloc ein Array derselben Größe zuzuweisen.
quelle
Weil Sie das Array im Stapel speichern. Sie sollten es auf dem Haufen speichern. Unter diesem Link finden Sie Informationen zum Konzept des Heaps und des Stacks.
quelle