Quad-Problem bei Bit-Array-Test
Verfasst: 06.05.2006 12:43
Hallo,
ich habe gerade mal einen kleinen Dummy geschrieben um die Machbarkeit (Geschwindigkeit) für ein großes Bit-Array zu testen.
Dabei habe ich nun aber ein Problem das ich mir nicht erklären kann.
Bei der Debug-Ausgabe in der 2. Schleife kommt statt 16168 irgend ein Wert und danach nur noch 16176.
edit :
Ich bin gerade auf die Idee gekommen den Test auf Long statt Quad umzustellen und damit läuft es.
Nun vermute ich den Fehler doch eher bei Version 4.0 Beta 11 als bei mir.
Deshalb habe ich den Thread im Anfänger-Forum gelöscht und hier neu erstellt.
Da ich mir vorläufig noch keinen 64-Bit-Puter leisten kann dürfte es so eigentlich auch nicht langsamer sein.
Trotzdem wäre es interessant ob sich nun tatsächlich um einen Bug handelt.
ich habe gerade mal einen kleinen Dummy geschrieben um die Machbarkeit (Geschwindigkeit) für ein großes Bit-Array zu testen.
Dabei habe ich nun aber ein Problem das ich mir nicht erklären kann.
Bei der Debug-Ausgabe in der 2. Schleife kommt statt 16168 irgend ein Wert und danach nur noch 16176.
Code: Alles auswählen
StartTime = ElapsedMilliseconds()
WfO = 1024*1024
WfA = 256
RowSize = WfO / 8 ; 8 Bits = 1 Byte
MemSize = RowSize * WfA
*MemoryID = AllocateMemory(MemSize)
*c = AllocateMemory(RowSize)
If *MemoryID And *c
Debug "Startadresse des "+Str(MemSize/1048576)+"MB Speicherbereichs ist: "+Str(*MemoryID)
*a = *MemoryID + RowSize * 64
*b = *MemoryID + RowSize * 32
Debug "*a = " + Str(*a)
Debug "*b = " + Str(*b)
Debug "*c = " + Str(*c)
For i = 0 To RowSize-8 Step 8 ; ############## das läuft so ##############
PokeQ(*c+i, PeekQ(*a+i) & -1)
; Debug Str(i)
Next
Debug Str(i)+" Schleifendurchläufe beim Test"
For i = 0 To RowSize-8 Step 8 ; ######### hier läuft etwas schief ########
PokeQ(*c+i, PeekQ(*a+i) & PeekQ(*b+i))
Debug Str(i)
Next
Debug Str(i)+" Schleifendurchläufe bei dem was ich eigentlich will"
FreeMemory(*MemoryID)
Else
Debug "Konnte den angeforderten Speicher nicht reservieren!"
EndIf
ElapsedTime = ElapsedMilliseconds()-StartTime
Debug ElapsedTime
Ich bin gerade auf die Idee gekommen den Test auf Long statt Quad umzustellen und damit läuft es.
Nun vermute ich den Fehler doch eher bei Version 4.0 Beta 11 als bei mir.
Deshalb habe ich den Thread im Anfänger-Forum gelöscht und hier neu erstellt.
Code: Alles auswählen
StartTime = ElapsedMilliseconds()
WfO = 1024*1024
WfA = 256
RowSize = WfO / 8 ; 8 Bits = 1 Byte
MemSize = RowSize * WfA
*MemoryID = AllocateMemory(MemSize)
*c = AllocateMemory(RowSize)
If *MemoryID And *c
Debug "Startadresse des "+Str(MemSize/1048576)+"MB Speicherbereichs ist: "+Str(*MemoryID)
*a = *MemoryID + RowSize * 64
*b = *MemoryID + RowSize * 32
Debug "*a = " + Str(*a)
Debug "*b = " + Str(*b)
Debug "*c = " + Str(*c)
For i = 0 To RowSize-4 Step 4 ; ############## das läuft so ##############
PokeL(*c+i, PeekL(*a+i) & -1)
; Debug Str(i)
Next
Debug Str(i)+" Schleifendurchläufe beim Test"
For i = 0 To RowSize-4 Step 4 ; ######### hier läuft nichts mehr schief ########
PokeL(*c+i, PeekL(*a+i) & PeekL(*b+i))
; Debug Str(i)
Next
Debug Str(i)+" Schleifendurchläufe bei dem was ich eigentlich will"
FreeMemory(*MemoryID)
Else
Debug "Konnte den angeforderten Speicher nicht reservieren!"
EndIf
ElapsedTime = ElapsedMilliseconds()-StartTime
Debug ElapsedTime
Trotzdem wäre es interessant ob sich nun tatsächlich um einen Bug handelt.