Hallo liebe Community,
ich habe mit Shed Skin einen Prototypen, geschrieben in Python, nach C++ kompiliert. Danach das ganze unter Win7 und MinGW kompiliert. Ich erhalte leider die Meldung "Too many heap sections" während der Laufzeit. Ohne -g switch erhalte ich auch die Meldung
"GC Warning: Repeated allocation of very large block (appr. size 65536):
May lead to memory leak and poor performance.
(use a 64-bit system to possibly avoid GC warnings, or use shedskin -g to disabl
e them)"
Auf den ersten Blick finde ich den Fehler nicht im Quellcode. Vermutlich läuft eine Schleife länger als es optimal wäre. Nur Arbeitsspeicher ist genug da, d.h. irgendwo muss ein Limit gesetzt sein. Wäre auch interessant wenn der Compiler mir sagen würde, was für ihn "too many" ist.
Könnt ihr mir Tipps geben, wie ich den Fehler aufspüren kann. Da gibt es doch sicher Debugger / Tools für ?
Danke !
gc+: Too many heap sections
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: gc+: Too many heap sections
GC? Garbage Collector?jeanluc hat geschrieben:Hallo liebe Community,
ich habe mit Shed Skin einen Prototypen, geschrieben in Python, nach C++ kompiliert. Danach das ganze unter Win7 und MinGW kompiliert. Ich erhalte leider die Meldung "Too many heap sections" während der Laufzeit. Ohne -g switch erhalte ich auch die Meldung
"GC Warning: Repeated allocation of very large block (appr. size 65536):
May lead to memory leak and poor performance.
(use a 64-bit system to possibly avoid GC warnings, or use shedskin -g to disabl
e them)"
Sicher, dass Du C++ machst? ^^
Eine Schleife läuft eigentlich nicht im Compilerzeit, sondern zur Laufzeit. Wenn hier aber der Compiler meckert, dann ist hier was anderes kaputt, zum Beispiel tausende "if ... {} else if ... {} else if ... {}"jeanluc hat geschrieben:Auf den ersten Blick finde ich den Fehler nicht im Quellcode. Vermutlich läuft eine Schleife länger als es optimal wäre. Nur Arbeitsspeicher ist genug da, d.h. irgendwo muss ein Limit gesetzt sein. Wäre auch interessant wenn der Compiler mir sagen würde, was für ihn "too many" ist.
Könnt ihr mir Tipps geben, wie ich den Fehler aufspüren kann. Da gibt es doch sicher Debugger / Tools für ?
Ich kenne Shed Skin nicht und wenn ich daraus höre, dass Du ein Python-Programm nach C++ "kompilierst", dann klingt das für mich wie ein C++-Codegenerator. Ich habe gerade in Python einen C++-Codegenerator für eine andere Sprache geschrieben und damit den Visual C++ auch überfordert...
Vielleicht hat Shed Skin da ein ähnliches Problem.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: gc+: Too many heap sections
Xin, ich bin nicht doof. http://www.heise.de/download/mingw.html ist dir doch bekannt ?Xin hat geschrieben: Sicher, dass Du C++ machst? ^^
Ums zu präzisieren: Die Meldung "Too many heap sections" erscheint während der Laufzeit des kompilierten C++ Programms (EXE Datei).Xin hat geschrieben: Eine Schleife läuft eigentlich nicht im Compilerzeit, sondern zur Laufzeit. Wenn hier aber der Compiler meckert, dann ist hier was anderes kaputt, zum Beispiel tausende "if ... {} else if ... {} else if ... {}"
Ja, die Software übersetzt meinen Python Code zu C++ Code.Xin hat geschrieben: Ich kenne Shed Skin nicht und wenn ich daraus höre, dass Du ein Python-Programm nach C++ "kompilierst", dann klingt das für mich wie ein C++-Codegenerator.
Ja, schwer zu sagen. Da aber meine Python-Variante ein paar hundert MB Speicher belegt, vermute ich mal, dass da mein Speicherverbrauch nicht optimal ist. Der MinGW Garbage Collector scheint da restriktiver zu sein als der Python Garbage Collector !?Vielleicht hat Shed Skin da ein ähnliches Problem.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: gc+: Too many heap sections
MinGW ist mir durchaus bekannt, aber Garbage Collection und C++ ist - vorsichtig ausgedrückt - unüblich.jeanluc hat geschrieben:Xin, ich bin nicht doof. http://www.heise.de/download/mingw.html ist dir doch bekannt ?Xin hat geschrieben: Sicher, dass Du C++ machst? ^^
Die Frage ist also durchaus berechtigt.
Dann wurde das Programm ja erfolgreich kompiliert. Entsprechend geht es hier wohl weniger um einen C++-Garbage Collector, sondern um eine Garbage-Verwaltung für C++.jeanluc hat geschrieben:Ums zu präzisieren: Die Meldung "Too many heap sections" erscheint während der Laufzeit des kompilierten C++ Programms (EXE Datei).Xin hat geschrieben: Eine Schleife läuft eigentlich nicht im Compilerzeit, sondern zur Laufzeit. Wenn hier aber der Compiler meckert, dann ist hier was anderes kaputt, zum Beispiel tausende "if ... {} else if ... {} else if ... {}"
Diese wiederum kenne ich aber wiederum nicht.
Ich benutze meinen Codegenerator, weil ich rund 5MB Quellcode nach einem bestimmten Muster erzeugen muss.jeanluc hat geschrieben:Ja, die Software übersetzt meinen Python Code zu C++ Code.Xin hat geschrieben:Ich kenne Shed Skin nicht und wenn ich daraus höre, dass Du ein Python-Programm nach C++ "kompilierst", dann klingt das für mich wie ein C++-Codegenerator.
Wenn der Code nicht kompilierbar ist oder hakt, ändere ich den Codegenerator.
Ist Dein Code denn groß?jeanluc hat geschrieben:Ja, schwer zu sagen. Da aber meine Python-Variante ein paar hundert MB Speicher belegt, vermute ich mal, dass da mein Speicherverbrauch nicht optimal ist. Der MinGW Garbage Collector scheint da restriktiver zu sein als der Python Garbage Collector !?Vielleicht hat Shed Skin da ein ähnliches Problem.
Ich meine... was soll ich sagen, wenn ich das Tool kenne, das den Code geschrieben hat, noch der Code bekannt ist? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: gc+: Too many heap sections
Meine Frage zielte sich auf Tools / Debugger, mit denen man "Lecks" lokalisieren kann.
Ich denke aber es liegt primär an MinGW, denn eine Liste mit 65000 Elementen scheint dem Garbage Collector nicht zu schmecken.
Genutzt wird übrigens die http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung.
Ich denke aber es liegt primär an MinGW, denn eine Liste mit 65000 Elementen scheint dem Garbage Collector nicht zu schmecken.
Genutzt wird übrigens die http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: gc+: Too many heap sections
valgrind, gibt's aber leider nicht für Windows.jeanluc hat geschrieben:Meine Frage zielte sich auf Tools / Debugger, mit denen man "Lecks" lokalisieren kann.
Unter Windows kosten die wohl in der Regel Geld, einen Hinweis auf einen Windows-tauglichen valgrind würde ich aber auch gerne haben.

Wobei ich immernoch nicht verstehe, was MinGW mit einer GarbageCollection zu tun hat.jeanluc hat geschrieben:Ich denke aber es liegt primär an MinGW, denn eine Liste mit 65000 Elementen scheint dem Garbage Collector nicht zu schmecken.
Wenn Du ein Programm geschrieben hast, dass eine Garbage-Collection besitzt, liegt das wohl nicht am MinGW, sondern am Code der GarbageCollection.
Hast du Dein Programm schonmal auf Linux kompiliert? Dort könntest Du valgrind nutzen.jeanluc hat geschrieben:Genutzt wird übrigens die http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung.
Möchtest Du die GarbageCollection debuggen!?
Ansonsten ist die Verwendung einer GC in C++ nicht üblich. Ein Hinweis auf nicht übliche Dinge kann nicht schaden

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: gc+: Too many heap sections
Schau nochmal das Beispiel unter
http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung
Wenn man sich auf diese Quelle verlassen möchte, liegt es eindeutig an MinGW bzw. an der Bibliothek, die mitgeliefert wird. malloc() wird durch gc_malloc() ersetzt, dafür free() weggelassen.
Habe es noch nicht unter Linux kompiliert, denke aber es wird seitens Shed Skin so oder so gc_malloc() benutzt. Jedenfalls ist der Boehm GC als Voraussetzung auf der Homepage gelistet.
http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung
Wenn man sich auf diese Quelle verlassen möchte, liegt es eindeutig an MinGW bzw. an der Bibliothek, die mitgeliefert wird. malloc() wird durch gc_malloc() ersetzt, dafür free() weggelassen.
Habe es noch nicht unter Linux kompiliert, denke aber es wird seitens Shed Skin so oder so gc_malloc() benutzt. Jedenfalls ist der Boehm GC als Voraussetzung auf der Homepage gelistet.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: gc+: Too many heap sections
Du darfst immer davon ausgehen, dass sobald Du fremde Produkte nutzt, Du auch fremde Bugs nutzt. Software ist (nahezu) nie fehlerfrei.jeanluc hat geschrieben:Wenn man sich auf diese Quelle verlassen möchte, liegt es eindeutig an MinGW bzw. an der Bibliothek, die mitgeliefert wird. malloc() wird durch gc_malloc() ersetzt, dafür free() weggelassen.
Habe es noch nicht unter Linux kompiliert, denke aber es wird seitens Shed Skin so oder so gc_malloc() benutzt. Jedenfalls ist der Boehm GC als Voraussetzung auf der Homepage gelistet.
Das bedeutet leider auch, dass andere Produkte nicht zwangsläufig Deine Probleme lösen.
Ich habe keine Ahnung, wie aufwendig Dein Problem ist, ob Du das gut von Hand portieren kannst oder eher nicht. Ich weiß aber, dass Python einige Dinge anders macht, als C++ und eine automatische Portierung wäre mir ehrlich gesagt nie in den Sinn gekommen. Das klappt vielleicht bei einem "Hello World" problemlos, aber wenn Du mehr zu portieren hast, hast Du hoffentlich auch Recherchen eingezogen, für was Shed Skin geeignet ist und wo hier Grenzen sind.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.