2010-06-12 7 views
5

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

11

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.

+1

Oder ein 'std :: vector (300 * 300 * 4)' oder ein 'boost :: array , 300>, 4>', um ein paar C++ vorzuschlagen Lösungen. – MSalters

3

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“

2

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]); 
2

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.

+1

Totally @ Ihr zweiter Absatz. (Aus ähnlichen Gründen weiß ich jedoch nicht, warum Windows Vista immer noch von jemandem verwendet wird.) – Artelius

Verwandte Themen