Wenn ich versuche, ein 3D-Array der Größe 300 * 300 * 4 in einem C-Programm zu initialisieren, wird mein Programm beendet und meldet Stapelüberlauffehler. Das System, das ich verwende, hat 3GB RAM, was ausreichend sein sollte. Gibt es eine Möglichkeit, den Speicher für ein Programm zu erhöhen? Ich verwende Dev C++ unter Windows Vista.So erhöhen Sie die Speicherzuweisung für das Programm
Antwort
Entweder malloc()
/free()
(oder new[]
/delete[]
für C++) verwendet werden, oder ein globales Array oder einem lokalen statischen Array. Wenn Sie versuchen, ein nicht statisches Array innerhalb einer Funktion zu erstellen, wird es auf dem Stack zugewiesen, und Stacks sind im Allgemeinen nicht sehr groß.
Sie können auch versuchen, das Array rückwärts zu initialisieren. Einige Betriebssysteme erweitern den Stack dynamisch, wenn Seitenfehler auftreten, und da auf x86 der Stack numerisch nach unten wächst, kann die Rückwärtsinitialisierung hilfreich sein.
Sie müssen erhöhen, wie viel Stapelspeicherplatz Ihr Programm verwenden kann.
Sie können die maximale Stapelgröße in den Eigenschaften festgelegt unter Dialog „Linkers | System | Stapel Reserve Size“
Auch wenn Sie 3 GB RAM haben, wird die Stack-Größe durch das Betriebssystem begrenzt und ist in der Regel klein, da große Strukturen wie diese wahrscheinlich auf dem Heap zugewiesen sind, nicht auf dem Stack.
Da Sie C++ verwenden, maybe you could use Boost?
boost::multi_array<int, 3> x (boost::extents[300][300][4]);
Da Sie DevC++ verwenden, verwenden Sie vermutlich den gcc-Compiler und damit den ld-Linker. Der Linker verfügt über eine Option -stack stacksize
, mit der Sie die dem Stack zugewiesene Speichermenge steuern können. Wie du das von DevC++ machen würdest, weiß ich nicht.
Ich weiß auch nicht, warum jemand DevC++ überhaupt verwenden würde - es ist fehlerhaft und wird nicht mehr entwickelt. Sie sollten erwägen, auf eine bessere IDE umzusteigen - Code::Blocks hat gerade eine neue Hauptversion, ist DevC++ in jeder Hinsicht überlegen und kommt mit einem viel moderneren C++ - Compiler.
Totally @ Ihr zweiter Absatz. (Aus ähnlichen Gründen weiß ich jedoch nicht, warum Windows Vista immer noch von jemandem verwendet wird.) – Artelius
- 1. So erhöhen Sie das Timeout in CasperJS
- 2. So erhöhen Sie die Zeit für die Gestenzeit
- 3. So erhöhen Sie den Heapspeicher für Wildfly
- 4. So erhöhen Sie die maximale Audio-Ausgangsleistung
- 5. So erhöhen Sie die Schriftgröße von Etikettennamen
- 6. So verfolgen Sie die Speicherzuweisung bei Verwendung von Smartpointer
- 7. Dynamische Speicherzuweisung für Zeigerarrays
- 8. Erhöhen Sie die Bildlaufleistengröße für automatische Vervollständigung
- 9. So erhöhen Sie das Timeout-Intervall für die Kommunikation über lange Zeit zum Server
- 10. So erhöhen Sie die Schriftgröße für das Befehlsfenster in der Oktave
- 11. dynamische Speicherzuweisung für Arrays C
- 12. Segmentierungsfehler für einfache Speicherzuweisung
- 13. erhöhen Sie den Speicher für die Anwendung
- 14. So erhöhen Sie die Lautstärke im OSX PlaySoftMidi-Beispiel.
- 15. So erhöhen Sie die Höhe der Tableiste in ios
- 16. Erhöhen Sie das TCP-Empfangsfenster für einen bestimmten Socket
- 17. dynamische Speicherzuweisung für die 3D-Array
- 18. So erhöhen Sie die Seitenleistung in Asp.net C#
- 19. So erhöhen Sie die Anzahl der parallelen Aufgaben in C#
- 20. So erhöhen Sie den Zugriffsmodifikator einer Eigenschaft
- 21. So erhöhen Sie die Player-Klasse Größe Bei einer Kollision?
- 22. So drucken Sie Zeitstempel durch das Programm in iOS
- 23. So erhöhen Sie einen Zähler in SQLAlchemy
- 24. So erhöhen Sie alle Preise, die Werte um 10% diktieren
- 25. So erhöhen/verringern Sie die Schriftgröße in Dojo DataGrid
- 26. So erhöhen Sie die Schriftgröße von ggtitle in ggplot2
- 27. So erhöhen Sie die Schriftgröße des SWT-Dialogfelds Titel
- 28. Erhöhen Sie das Jenkins-Login-Timeout
- 29. Java2D: Erhöhen Sie die Linienbreite
- 30. So führen Sie das Java-Programm in der Eingabeaufforderung aus
Oder ein 'std :: vector (300 * 300 * 4)' oder ein 'boost :: array , 300>, 4>', um ein paar C++ vorzuschlagen Lösungen. –
MSalters