Stack-Verbrauch ermitteln?
Übersicht

sinjinBetreff: Stack-Verbrauch ermitteln? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gibt es eine Möglichlichkeit nur den Speicherverbrauch des Stacks zu ermitteln? Ich habe 2 Programme geschrieben die nach einigen Stunden Laufzeit jegliche grafische Darstellung einstellen, zudem ist dann die CPU-Auslastung auf 100%, ich vermute es liegt am Stack. Die Werte von GCCOLLECT und GCMEMALLOCED werden aber nicht größer. | ||
![]() |
Cykid |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also die CPU Auslastung sollte erstmal nichts mit dem Stack zu tuen haben.
Hast du eine aufwändige Schleife? Ist die CPU auslastung ebenfalls so hoch wenn du einen Timer einbaust? |
||
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe gestern ein kleines Test-Programm laufen lassen mit Timer(1 Sekunde) und Graphics. Nach ungefähr 6 Stunden das selbe Problem. Gerade lasse ich 2 Tests im Hintergrund laufen, diesmal ohne Graphics. Ein Prog mit Timer, das andere ohne. | ||
![]() |
Cykid |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du vlt. etwas relevanten Quellcode?
Grafik immer wieder neugezeichnet ohne zu löschen? Wie hast du das mit dem Timer gemacht? Ich verstehe das mit Einer Sekunde nicht ganz. |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Quellcode wäre in der Tat gut!
Auch wenn es nicht unmöglich ist, dass sich nach ein paar Stunden irgendein Fehler in BlitzMax selbst offenbart. Ich hatte glaub ich nie ein graphisches Programm in BlitzMax so lange offen... Stack ist sehr unwahrscheinlich, aber du kannst es testen (um mal die eigentliche Frage zu beantworten). Ist ja nur ein paar Zeilen Assembly-Code ![]() Speichere die Datei als stack.s: Code: [AUSKLAPPEN] format MS COFF
; oder fuer Linux: ; format ELF section '.text' public _StackZero _StackZero: mov [sz], esp ret public _GetRelativeStackSize _GetRelativeStackSize: mov eax, [sz] sub eax, esp ret section '.data' sz dd ? Dann stehen dir die Funktionen StackZero() und GetRelativeStackSize:Int() zur Verfügung. Die StackZero setzt den momentanen Stand des Stack als 0 und GetRelativeStackSize:Int() gibt dir dann die Relative Größe an. Beispiel: BlitzMax: [AUSKLAPPEN] Framework brl.standardio |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
sinjin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Leider komme/kam ich heute nicht mehr dazu solange zu testen. Aber der Stack mit Thunders Code(hätte ich auch selber drauf kommen können) scheint sich nicht zu erhöhen. Aber hier mein Quellcode:
Code: [AUSKLAPPEN] global win:tgadget=createwindow("new",0,0,200,200,null,15-window_menu-window_status+window_acceptfiles+window_hidden)
global can:tgadget=createcanvas(0,0,200,200,win) setgraphics canvasgraphics(can) showgadget win global redraw% global timer:ttimer=createtimer(1) 'stackzero repeat waitevent select currentevent.id case event_windowclose exit case event_gadgetpaint redraw=true endselect if (currentevent.source=timer) then redraw=true endif if redraw then redraw=false cls drawtext timer._ticks,0,0 'drawtext GetRelativeStackSize(),0,20 flip endif forever Edit: Zuerst aufgefallen ist mir das mit diesem Code. |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne Stack ist es sicher nicht. Wenn du zu viel Stack verbrauchen würdest, würde das Programm gekillt werden.
Und der kurze Beispielcode, den du gepostet hast, hört nach paar Stunden auf zu zeichnen? ![]() Eine Idee hab ich noch: Check mal, ob es einen Unterschied macht, wenn du einen "Threaded Build" machst. Soweit ich weiß verwendet der einen anderen Garbage Collector - und den habe ich unter Verdacht. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group