böse UMEE

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

regaa

Betreff: böse UMEE

BeitragDi, Aug 23, 2005 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Bug Reports auf bb.com hilft nischt.

Hat vielleicht wer von euch auch so derbe unhandled memory exception errors beim aufruf von flushmem() ? Passiert auch nur bei einer einzigen datei bei mir, alle andere demos/progs/apps laufen. Kann auch nur ganz schlecht den source posten, ist a bissel lang geworden.

Der Simon der, der wollte mir helfen. Hat bis heute nicht geantwortet.

Ohne flushmem tritt der umee nicht auf. N Programm in BMax ohne flushmem ist aber nicht sehr toll. Der Debugger zeigt auch nix dolles an, markiert mir nur die blöde Zeile mit flushmem.

Jammerjammer. Ist es ein bekanntes Treiberproblem oder dergleichen? Würde nämlich gerne weiter an meiner rendered- gui proggen.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

TheShadow

Moderator

BeitragMi, Aug 24, 2005 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Was mich am meisten an bbmax stört ist ehrlich FlushMem() - besser wäre wenn alles wirklich automatisch gehen würde - von mir aus irg mit "FlushAuto" - Funktion.

Ich glaube sonst hat sowas keine einzige Programmiersprache... Das Problem bei mir ist, dass ich einfach nicht weiß wo das nun hingehört - wenn ich es nur 1x in die Hauptschleife packe, dann wird trotzdem nicht wirklich alles freigegeben - vieles bleibt reserviert. Deswegen habe ich es in die kritischsten Funktionen nochmals überall reingeschrieben - vllt ist es sogar besser vor jede Funktion sowas zu setzen... (außer den zeitkritischsten Funktionen)

Function foo()
FlushMem()

...

EndFunction


Pass z.B. mal auf diesen code:

Code: [AUSKLAPPEN]

Strict

Local a:String="Hallo"
Local b:String
Local i:Int
Local m1:Int
Local m2:Int

FlushMem()
m1=MemAlloced()

For i=1 To 1000
b=Left(a,1)
'FlushMem()
Next

b=null
FlushMem()
m2=MemAlloced()
Print "VERBRAUCHT: "+String(m2-m1)+" BYTE"


so nun siehst du wieviel sowas verbraucht - ganze 4 byte pro schleifendurchgang! setzt man nun flushmem in die schleife - dann wird nix verbraucht.

So kopiert man nur den Code ab FOR-Zeile mehrmals nach unten - so sieht man, dass in wirklichkeit der Speicherverbrauch nicht wächst - aber auch niemals freigegeben wird. Laut Aussage ist das ein autom. Mechanism, der die Ausführung beschleunigen soll... Was ist, wenn man das 1.000.000 x ausführen will? Naja
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

TheShadow

Moderator

BeitragMi, Aug 24, 2005 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
noch so ein Beispiel

Code: [AUSKLAPPEN]

Strict
Local i:Int

For i=1 To 10
   test()
Next

Function test()
   Local a:String="Hallo"
   Local b:String
   Local i:Int
   Local m1:Int
   Local m2:Int
   Local x:Int

   FlushMem()
   m1=MemAlloced()

   For i=1 To 10000
      b=Left(a,1)
      x=x+1
      If x=45 Then x=0; FlushMem()
   Next

   b=Null
   FlushMem()
   m2=MemAlloced()
   Print "VERBRAUCHT: "+String(m2-m1)+" BYTE"
EndFunction


das interessante nun:

die zeile:
If x=45 Then x=0; FlushMem()

setzt man einen höheren wert als 45 (=180 byte), dann wird speicher "reserviert" und nie wieder in der schleife freigegeben. was an sich auch nicht so schlimm ist, da bei mehrfacher ausführung niemals wieder was verbraucht wird...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Markus2

BeitragMi, Aug 24, 2005 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@regaa

Ich glaube da hilft nur eins,
alles auskommentieren bis kein UMEE kommt Confused

@TheShadow

Mach das doch erstmal in die Hauptschleife .
Mark weiß das keiner FlushMem haben will
und ich habe auch versucht zu erklären wie
man das verbessern könnte .

Local b:String
b=Null
das finde ich falsch und würde nur NULL benutzen
wenn die Variable eine Struktur ist weil du die
ja mit new reservieren mußt .

TheShadow

Moderator

BeitragMi, Aug 24, 2005 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Mach das doch erstmal in die Hauptschleife .


Was ich sagen wolte: Es gibt einen Unterschied, ob man es in die Hauptschleife macht oder irgendwo sonst... 1x im ganzen Programm kann oft zu wenig sein... Das sieht man schon an verbrauchten Speicher...

ab blitzmax ist null für alle arten von variablen oder objekten gültig - sowohl bei integer als auch bei string und anderen objekten

Zitat:

Expressions:
Null returns 0, an empty string, an empty array, the null object or a pointer to 0 depending on context.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

regaa

BeitragMi, Aug 24, 2005 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, dann werdenma 10000 zeilen von der fehlerposition aus durchkommentieren, mal gucken wann der fehler nicht mehr kommt. oder ich warte auf patch, oder ich steige gänzlich auf c# um, weil ich da grade so nen drall zu der sprache hab Laughing .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Markus2

BeitragMi, Aug 24, 2005 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheShadow
da wo viel Speicher reserviert wird macht es manchmal Sinn
den direkt wieder frei zu geben .
In der Hauptschleife kommt man nicht drum herum Sad

@regaa
Ist Sau Arbeit aber so findest du den Fehler bestimmt .
Evtl. findest du ihn auch wenn du den Quelltext mal
von vorne bis hinten genau angugst .
Wenn nicht hat Mark was verbockt Confused
 

Dreamora

BeitragMi, Aug 24, 2005 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal was ganz absurdes: öffne die datei mit wordpad und entferne die zeile mit dem flushmem das bockt total
dann speicher sie

danach ganz normal wieder laden in der IDE und die zeile mit dem flushmem wieder neu schreiben.
Weiss nicht warum, aber zum teil hats irgendwie einen massiven bug mit der zeile ... als ob die IDE da was verbockt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMi, Aug 24, 2005 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo Dreamora das gerade sagt ,
bei mir ging letztens mitten drin die Quick Hilfe mit F1 nicht mehr .
Habe da die Spaces entfernt und dann klappte die wieder !?

regaa

BeitragMi, Aug 24, 2005 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn es das jetzt ist ..... (bin mal kurz was testen)

Boah, wie gay:
user posted image
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Markus2

BeitragMi, Aug 24, 2005 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@regaa

wenn du den Fehler immer noch bekommst
gibt doch mal was zum testen als download .

regaa

BeitragDo, Aug 25, 2005 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich und Dreamora tüfteln die ganze Zeit an dem Prob.

Den Fehler bekomm ich allerdings schon seit der Einführung der Driver().
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

bruZard

BeitragDo, Aug 25, 2005 7:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz verrückte Idee:

Versuche mal in der Hauptschleife Speicher zu verbrauchen ... und sei es nur durch ein "Local:mx:Short = MouseX()" oder so ...

oder der Kram funkt nicht weil While ja nach dem Wahrwerden der Bedingung nocheinmal durchlaufen wird, vielleicht löst ja ein "Repeat ... Until KeyHit(KEY_ESCAPE)" das Problem.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Dreamora

BeitragDo, Aug 25, 2005 7:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir haben irgendwie schon das ein oder andere gefunden, wenn man die flushmem weiter oben reinpackt.
Aber wirklich sinn machen tun die error net ... Es scheint als würde BM bilderzeugungen mit negativen nummern zulassen und sogar das grabben aber dann später beim zeichnen rennt es in einen UMEE welchen es ohne DebugStop und step through beim Flushmem ausspuckt.

An solchen Tagen wünscht man sich einen debugger der wundersamerweise sogar funktioniert ... denn der Fehler müsste eigentlich schon beim erzeugen oder spätestens beim grabben kommen ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

regaa

BeitragDo, Aug 25, 2005 8:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap, an dieser Stelle nochmal fettes Dankeschön and dich. Werd mal gucken wo genau die negativen Bilder erzeugt werden und diese Fehler ausmerzen.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group