Füllung von Banks

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

mpmxyz

Betreff: Füllung von Banks

BeitragFr, Jul 03, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei der Arbeit mit meinem Precompiler ist mir etwas aufgefallen:

Code: [AUSKLAPPEN]
Local Bank=CreateBank(10)
ResizeBank Bank,101
Local Offset
For Offset=0 To 100
   Print PeekByte(Bank,Offset)
   Delay 100
Next
WaitKey
End


Schaut euch mal die Ausgabe an!
Während die ersten 10 Werte immer 0 sind, sind die anderen, die durch das "Resizebank" hinzugefügt wurden, zufällig mit Werten aus dem Nirwana gesetzt worden.
Bei Exen ist das noch schlimmer.
Ist das bei euch auch so?
Wenn ja, dann ist das eine Sache, die man sich merken sollte!
Ein Hinweis in der BB-Hilfe wäre auch nicht schlecht.

mfG
mpmxyz

P.S.: Die Codeoptimierungen in meinem Precompiler kann ich daher jetzt entfernen. Sad
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

n-Halbleiter

BeitragFr, Jul 03, 2009 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir ist es auch so, es könnte eventuell daher kommen, dass bei CreateBank der Speicher für die Bank freigeräumt wird, und bei ResizeBank nicht. Und da ja der Arbeitsspeicher viel genutzt wird, kann es so dann passieren, dass da noch Werte von irgendwoanders sind. Zumindest wäre das die einzige Erklärung die mir so spontan einfällt.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jul 03, 2009 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir steht alles auf Null. Vielleicht sollte ich mal mein Rechner ein paar Tage an lassen, bis entsprechende Speicherbereiche schonmal beschrieben waren.

Allerdings - wenn man sich den Sinn und die Funktionsweise von Banken mal ansieht - bin ich schon froh, dass überhaupt ein Befehl wie ResizeBank existiert. Denn dieser ist nicht unbedingt als selbstverständlich anzusehen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

mpmxyz

BeitragFr, Jul 03, 2009 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin da auch drüber froh, aber ich war bei meinen Optimierungen davon ausgegangen, dass es wie bei "CreateBank()" auf 0 gesetzt ist.
Vielleicht ist dies aber auch nur Zufall.
Ich vermute, dass du weniger Programme offen hattest und dein PC fast noch frisch gestartet war.
Dann ist die Wahrscheinlichkeit, dass man etwas anderes außer 0 sieht, geringer.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Noobody

BeitragFr, Jul 03, 2009 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei CreateBank wird der angeforderte Speicherbereich mit Nullen gefüllt, bei ResizeBank kann der vorher unbeschriebene Bereich zufällige Werte enthalten.

Musste ich auch feststellen, als bei aus Banks erstellten Bildern plötzlich Pixelfehler auftraten Razz
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

hazumu-kun

BeitragSa, Jul 04, 2009 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine interesante Sache bei Banks ist auch dass man bei folgenden Code...
Code: [AUSKLAPPEN]

bank= CreateBank(32)
Pokebyte bank,128,255

...keinen Fehler angezeigt bekommt.

Sondern dieses Prinzip sich bis zum Offset 4096 (4 Kilobyte) fortsetzen lässt.
Scheint wohl am internen Speichermanagement von Windows XP zu liegen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Noobody

BeitragSa, Jul 04, 2009 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 4 kb haben nichts mit dem internen Speichermanagement von Windows zu tun, sondern kommen daher, dass ohne Debugger die Offsets von Bankzugriffen nicht überprüft werden.
Je nach Position des Speicherbereichs der Bank kommt es dann früher oder später zu einem MAV, weil man etwas wichtiges von BB überschreibt.

Auf dieser Maschine beispielsweise kann ich bis zum Offset 9860 schreiben, bevor es abstürzt - kommt halt ganz drauf an, wie der Arbeitsspeicher gerade genutzt wird.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

DAK

BeitragSa, Jul 04, 2009 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ähhmm... leute, ich will euch nicht den spaß verderben, aber iwie in unreservierten rambereichen (die vllt sogar von anderen programmen benützt werden) heumschreiben is scho bissal blöd, oder?... stellts euch mal vor, ihr überschreibts iwas wichtiges gerade geöffnetes von windows. zb den ntfs-treiber... wär scho lustig, was dabei passieren könnte...
wilde pointer (und diese bankgeschichte zählt im grunde als wilder pointer) sollten auf jeden fall vermieden werden (im lesen is wurscht, im schreiben is gaaanz ganz böse)
Gewinner der 6. und der 68. BlitzCodeCompo
 

ChristianK

BeitragSa, Jul 04, 2009 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann im Speicher anderer Programme weder lesen noch schreiben. Wenn man nicht reservierten Speicher verändern will, verursacht man damit höchstens einen Absturz des eigenen Programmes.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

hazumu-kun

BeitragSa, Jul 04, 2009 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Windows schützt intern den Speicher anderer Programme vor fremden Zugriffen.
Deswegen werden die meisten Trainer-Programme für Spiele von Antivirern Software als Virus gemeldet.
Weil sie eben diesen Schutz übergehen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group