Heap-Grenze erreicht, was nun?
-
Hallo an alle,
ich habe in meinem Programm leider meine Heap-Beschränkung erreicht... Laut MSDN wird unter anderem vorgeschlagen, dass ich eine zu große Datei in mehrere kleine Dateien aufteilen soll. Das wollte ich auch machen, aber wie kann ich das realisieren, wenn ich in dieser Datei 20 Funktionen definiert habe (in keinen Klassen oder ähnlichem), die sich gegenseitig aufrufen? (Es handelt sich um ein kleines Menü.) Wenn ich z.B. die Hälfte der Methoden in eine neue .cpp Datei verschiebe, dann scheinen sich die Methoden aus den beiden Dateien nicht mehr zu kennen, auch nicht, wenn ich die anderen vorher deklariert habe... (oder muss ich das in beiden .cpp`s machen?) Kann mir da einer von euch bitte weiterhelfen?
Oder kann mir einer erklären, wie ich dieses /Zm einstelle? Ich bin aus der Beschreibung bei MSDN wirklich nicht schlau geworden.
Ich benutze den MS Visual C++ 6.0 (SP3)
Danke,
Basti
/Edit: AAhhhhh.... ich hab soweit herausbekommen, dass ich alle Methoden in beiden .cpp`s deklarieren muss... (hätte wohl erst mehr probieren sollen, bevor ich poste
)
Aber: Kann mir bitte noch jemand trotzdem erklären, wie ich die Heap-beschränkung hochsetze?
-
... das du die Grenze des Speichers erreicht hast. Ich mein ich hab schon Programme kompiliert die 1 mb gross waren und Datenmengen von mehr als 20 mb gefressen haben... war nie ein Problem. Dein Problem ist (vor allem nach der Beschreibung) ein Designfehler.
Klassen die sich selbst aufrufen ist (fast) immer falsch.
Sag was du möchtest. Hier kann dir bestimmt wer helfen.
-
für die zukunft:
projekt->einstellungen->c/c++
unten:
/Zm10 //10 mb gesamt oder heaplimit
/F10485760 //10mb stacklimit(bytes)
-
IMHO verwechselst du das was. VC++ sagt dir das die Klasse zu groß ist oder? Ich habe es bei mir ehrlich gesagt noch nicht erlebt aber davon gehört.
Da bleibt dir dann wirklich nichts anderes übrig als dein Design zu verändern und bestimmte Dinge in anderen Klassen auszulagern.
-
Ich finde es komisch, dass das schon bei so wenigen Funktionen passiert.
Ich habe das auch schon gehabt, aber die Klasse hatte hunderte von Get-/Set-Methoden und die Variable dazu. (Nein, ich habe mir das Design nicht ausgedacht.)
Das Hochsetzen reichte dann aber aus, bis ich das Projekt verlassen habe...
-
Die Methoden rufen sich selbst auf, weil das ein Menü ist und man ja auch zurück springen können soll... Falls das trotzdem ein Designfehler ist, dann hab ich wohl Pech gehabt. Ich muss das Projekt nämlich in 1,5 Wochen an der Uni abgeben und bis dahin schaff ich das echt nicht mehr, alles umzuschreiben...
DaDings schrieb:
... das du die Grenze des Speichers erreicht hast.
Ich habe nur die obere Beschränkung beim Kompilieren erreicht, weil er anscheinend mit 1636 Zeilen in der ursprünglichen .cpp überfordert war. dazu muss man sagen, dass ein Großteil der zeilen cout<<endl; sind, weil ich ja eine einigermaßen ansehnliche Ausgabe haben will. Ich habe jetzt einfach daraus 2 .cpp`s gemacht mit einmal 1234 und einmal 1402 Zeilen gemacht und dann hat es geklappt...
Bei MSDN stand ja auch, dass man seine Funktionen und seine Dateien möglichst kurz halten sollte... Aber trotzdem danke für eure Hilfe!
-
Da muss aber trotzdem irgendein Fehler in deinem Quellcode sein. Ich kenne Projekte in denen Quelldateien um die 40k LOC haben, wird auch vom VC6 problemlos übersetzt.
-
Oder kann mir einer erklären, wie ich dieses /Zm einstelle?
Indem man das in die Kommandozeile beim compilieren anhängt. Aber das ist wahrscheinlich garnicht das Problem.
Bitte lesen. Danke.
Bye, TGGC (Reden wie die Großen)
-
Lad doch erstmal das aktuelle Service Pack runter. SP6. Vielleicht hast du ja Glück und dieses SP behebt den Fehler.