gc+: Too many heap sections

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

gc+: Too many heap sections

Beitrag von jeanluc » Fr Okt 11, 2013 2:17 pm

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 !

Benutzeravatar
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

Beitrag von Xin » Fr Okt 11, 2013 2:29 pm

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)"
GC? Garbage Collector?

Sicher, dass Du C++ machst? ^^

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 ?
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 ... {}"
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.

jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Re: gc+: Too many heap sections

Beitrag von jeanluc » Fr Okt 11, 2013 3:46 pm

Xin hat geschrieben: Sicher, dass Du C++ machst? ^^
Xin, ich bin nicht doof. http://www.heise.de/download/mingw.html ist dir doch bekannt ?
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 ... {}"
Ums zu präzisieren: Die Meldung "Too many heap sections" erscheint während der Laufzeit des kompilierten C++ Programms (EXE Datei).
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, die Software übersetzt meinen Python Code zu C++ Code.
Vielleicht hat Shed Skin da ein ähnliches Problem.
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 !?

Benutzeravatar
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

Beitrag von Xin » Fr Okt 11, 2013 3:59 pm

jeanluc hat geschrieben:
Xin hat geschrieben: Sicher, dass Du C++ machst? ^^
Xin, ich bin nicht doof. http://www.heise.de/download/mingw.html ist dir doch bekannt ?
MinGW ist mir durchaus bekannt, aber Garbage Collection und C++ ist - vorsichtig ausgedrückt - unüblich.

Die Frage ist also durchaus berechtigt.
jeanluc hat geschrieben:
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 ... {}"
Ums zu präzisieren: Die Meldung "Too many heap sections" erscheint während der Laufzeit des kompilierten C++ Programms (EXE Datei).
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++.
Diese wiederum kenne ich aber wiederum nicht.
jeanluc hat geschrieben:
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, die Software übersetzt meinen Python Code zu C++ Code.
Ich benutze meinen Codegenerator, weil ich rund 5MB Quellcode nach einem bestimmten Muster erzeugen muss.

Wenn der Code nicht kompilierbar ist oder hakt, ändere ich den Codegenerator.
jeanluc hat geschrieben:
Vielleicht hat Shed Skin da ein ähnliches Problem.
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 !?
Ist Dein Code denn groß?

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.

jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Re: gc+: Too many heap sections

Beitrag von jeanluc » Di Okt 15, 2013 3:05 pm

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.

Benutzeravatar
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

Beitrag von Xin » Di Okt 15, 2013 3:29 pm

jeanluc hat geschrieben:Meine Frage zielte sich auf Tools / Debugger, mit denen man "Lecks" lokalisieren kann.
valgrind, gibt's aber leider nicht für Windows.
Unter Windows kosten die wohl in der Regel Geld, einen Hinweis auf einen Windows-tauglichen valgrind würde ich aber auch gerne haben. :-)
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.
Wobei ich immernoch nicht verstehe, was MinGW mit einer GarbageCollection zu tun hat.
Wenn Du ein Programm geschrieben hast, dass eine Garbage-Collection besitzt, liegt das wohl nicht am MinGW, sondern am Code der GarbageCollection.
jeanluc hat geschrieben:Genutzt wird übrigens die http://de.wikipedia.org/wiki/Boehm-Speicherbereinigung.
Hast du Dein Programm schonmal auf Linux kompiliert? Dort könntest Du valgrind nutzen.
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.

jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Re: gc+: Too many heap sections

Beitrag von jeanluc » Di Okt 15, 2013 3:38 pm

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.

Benutzeravatar
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

Beitrag von Xin » Di Okt 15, 2013 3:56 pm

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.
Du darfst immer davon ausgehen, dass sobald Du fremde Produkte nutzt, Du auch fremde Bugs nutzt. Software ist (nahezu) nie fehlerfrei.
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.

Antworten