Im Moment werden Sie 2619560*sizeof(float)
bytes auf dem Stack zuweisen (oder zumindest versuchen). Zumindest in den meisten typischen Fällen kann der Stapel nur eine begrenzte Menge an Speicher verwenden. Sie könnten versuchen, stattdessen static
zu definieren:
Dadurch wird es aus dem Stapel entfernt, so dass es normalerweise stattdessen verfügbaren Speicher verwenden kann. In anderen Funktionen ändert die Definition von static
die Semantik, aber im Fall von main
macht es wenig Unterschied (anders als die meist theoretische Möglichkeit eines rekursiven main
).
Legen Sie kein so großes Objekt auf den Stapel. Erwägen Sie stattdessen, es im Heap zu speichern, indem Sie es mit malloc () oder seinen Freunden teilen.
2.6M floats ist nicht so viele, und sogar auf einem 32-Bit-System sollten Sie für Adressraum in Ordnung sein.
Wenn Sie ein sehr großes Array zuweisen müssen, verwenden Sie unbedingt ein 64-Bit-System (vorausgesetzt, Sie haben genug Speicher!). 32-Bit-Systeme können nur ungefähr 3G pro Prozess adressieren, und selbst dann können Sie nicht alles als einen einzigen zusammenhängenden Block zuweisen.
Tags und Links c linux memory-management ubuntu segmentation-fault