Stack-Verbrauch ermitteln?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

sinjin

Betreff: Stack-Verbrauch ermitteln?

BeitragSa, Jul 18, 2015 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 20, 2015 7:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 20, 2015 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 20, 2015 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 20, 2015 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

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
Import "stack.s"

Extern
Function StackZero()
Function GetRelativeStackSize:Int()
EndExtern

StackZero
foo


Function foo(i = 0)
If i = 10 Then Print "Stack Size: "+GetRelativeStackSize() Else foo i+1
EndFunction
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

sinjin

BeitragMo, Jul 20, 2015 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jul 21, 2015 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Surprised

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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group