[beendet]ReAllocateMemory-[Windows98SpeicherBug/-Fehler!]:-(

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

ts-soft hat geschrieben:Das Win98 nicht in der Lage ist, Resourcen richtig freizugeben, ist doch nun
bekannt. Dafür kann PB aber nichts! Entweder man schreibt seinen Code so,
das er Win98 tauglich ist oder man unterstützt das WinDOS nicht, sondern
nur ab Win2000.

Der einzige Bug ist Win9x
Schon mal WinNT4 getestet? Das ist noch älter als Win2K.
Kann aber auch sein, das mein Emulator auf XP-Speicher fixiert ist :mrgreen:

MfG Falko
start
*MEM=8265160
*MEM=209584160
*MEM=398589984
*MEM=620625952
*MEM=846266400
*MEM=1072693280
*MEM=1298923552
*MEM=1524891680
*MEM=1749680160
*MEM=1969356832
*MEM=181665824
*MEM=403046432
*MEM=635043872
*MEM=863109152
*MEM=1090519072
*MEM=1316093984
*MEM=1544290336
*MEM=1774518304
*MEM=15597600
*MEM=248184864
*MEM=481099808
*MEM=707919904
*MEM=934019104
*MEM=1165361184
*MEM=1395327008
*MEM=1623523360
*MEM=1849622560
*MEM=92864544
...
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Und, was heißt das? Schafft er mehr oder weniger als WinDOS 98
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Wie lange würde der Code dauern? Wenn ich den durchlaufen lassen würde, dann bestimmt um das x-fache mehr als WinDOS 98, wenn du die Zeilen meinst. Ich hatte schon mal bis ca. 50Zeilen getestet und keinen Fehler erhalten.

Ist NT4 nicht älter als Win9x ?

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Doch, aber hat ein wesentlich besseres Speichermanagment. Das von Win98
basiert ja auf reinem DOS. Win98 hat ja nicht zum Spaß von Stiftung
Warentest die Wertung "UNGENÜGEND" erhalten :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Stiftung Warentest, die sollen mal lieber dabei bleiben Fußballstadion zu bewerten. *grins*
Ich glaube schon, daß die oft ihren Spaß haben.
Na ja, auf alle Bewertungen von denen sollte man nicht hören.

Stimmt natürlich das die NT-Schiene besser ist, besonders in der Speicherverwaltung, aber hier ist wenn dann nur ein kleiner Fehler PB oder Windows "vergißt" einfach das es den Speicher bereits freigegen hat. freigegeben ist er nämlich, auch die handles.

Langsam vermute ich zwar auch, das es an Window98 liegt (teste gerade die Apiaufrufe) aber verstehe so einiges am verhalten nicht.
Setzt mal in dem Code DIREKT NACH dem ersten und einzigen AllocateMemory() dies:
*MEM = ReAllocateMemory(*MEM, 1024*1024*32)
und dann klappt es. nicht nur das, auch sau schnell.
Langsam kann ich mir das nicht mehr erklären.

In dem Demo klappt es dann, aber ob das auch auf den realten Code bezogen klappt bezweifele ich.


Was mich auch wundert ist, das man zwar je Process 2 GB RAM nuten darf, aber pro Allocate(reAllocate) maximal den Physikalisch vorhanden Speicher als Maximum eingeben darf (be mir 256 MB). Die Auslagerungsdatei erweitert und erlaubt den Zugriff auf 2 GB pro Process, aber nicht pro AllociertenBerich!?

Jetzt stellt sich also die Frage WIE erfahre ich die Größe des verfügbaren Maximalen Speichers?
1. Win10
PB6.1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@ts-soft
Stimmt genau. Daher hat Win2K und XP auf der Basis NT weiterentwickelt,
da viele Firmen ein verläßliches System haben mußten.

Hab mal das Testprogramm am laufen und immer noch keine Fehlermeldung.

Zwischenstand ist jetzt:
...
Ausgabe sekündlich | i=960384 | *MEM=875364384
Ausgabe sekündlich | i=960512 | *MEM=906100768
Ausgabe sekündlich | i=960640 | *MEM=936902688
Ausgabe sekündlich | i=960768 | *MEM=967704608
Ausgabe sekündlich | i=960896 | *MEM=998506528
Ausgabe sekündlich | i=961024 | *MEM=1029308448
Ausgabe sekündlich | i=961152 | *MEM=1060110368
Ausgabe sekündlich | i=961280 | *MEM=1090912288
Ausgabe sekündlich | i=961408 | *MEM=1121714208
Ausgabe sekündlich | i=961536 | *MEM=1152516128
...
PS: das "ü" habe ich aber manuel zugefügt, weil mir die DOS-Ausgabe das leider nicht anzeigt. Ein ue im source wäre vielleicht besser gewesen :mrgreen:

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Falko hat geschrieben: PS: das "ü" habe ich aber manuel zugefügt, weil mir die DOS-Ausgabe das leider nicht anzeigt. Ein ue im source wäre vielleicht besser gewesen :mrgreen:

MfG Falko

Code: Alles auswählen

Procedure.s PrintX(Text.s)
  CharToOem_(@Text, @Text)
  ProcedureReturn Text
EndProcedure
OpenConsole()
PrintN("start") : Debug "start"
*MEM = AllocateMemory(16)
*MEM2
StartTime.l
For i = 1 To 800000*1000
  If ElapsedMilliseconds()-StartTime > 1000
    PrintN(PrintX("Ausgabe sekündlich | i="+Str(i) +" | *MEM=" + Str(*MEM ) ))
    Debug "*MEM=" + Str(*MEM )
    StartTime = ElapsedMilliseconds()
  EndIf
  *MEM2 = *MEM
  Repeat
    *MEM = ReAllocateMemory(*MEM2, 32*i) ; man kann auch nur "i" nehmen
    If *MEM = 0
      PrintN("_ReAllocateMemory()-Error | i=" + Str(i) + " | Size=" + Str(32*i) + " | *MEM2=" + Str(*MEM2) )
      Debug "_ReAllocateMemory()-Error | i=" + Str(i) + " | Size=" + Str(32*i) + " | *MEM2=" + Str(*MEM2)
      Delay(5000)
    EndIf
  Until *MEM <> 0
Next i
PrintN("ende") : Debug "ende"
For i = 1 To 600
  Delay(100)
Next i
CloseConsole()
:mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Tja,
es scheint doch WIndows98 zu sein, aber das sollte unbedingt wenn Fred das bestätigt mit in die Hilfe, den es betrifft ebenso Linkedlisten (vermutet) und Arrays (getestet).

Eine Array das man in der Größe auf die selbe art ändert crasht auch sofort. Dynamische Speicherverwaltung ist unter WIndows98 anscheindend gar nicht sicher möglich. Da müßte man komplett alles selber machen (gesamten RAM reservieren und dann selbst vergeben, natürlich auf den Process beschränkt.)

Code: Alles auswählen

OpenConsole()
PrintN("start") : Debug "start"
StartTime.l
For i = 1 To 800000 ;*1000
  Dim MyArray.l(i,32)
  If ElapsedMilliseconds()-StartTime > 1000
    PrintN("1/Sek.| i="+Str(i)+" | @MyArray()="+Str(@MyArray())  )
     StartTime = ElapsedMilliseconds()
     EndIf
    If @MyArray() = 0
      PrintN("_ReAllocateMemory()-Error | i=" + Str(i)  )
      Debug "_ReAllocateMemory()-Error | i=" + Str(i) 
      Debug GetLastError_()
      Delay(5000)
    EndIf
Next i
Debug i
PrintN("ende") : Debug "ende"
For i = 1 To 600
  Delay(100)
Next i
CloseConsole()
1. Win10
PB6.1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Friedrichs hat geschrieben:...
Jetzt stellt sich also die Frage WIE erfahre ich die Größe des verfügbaren Maximalen Speichers?
Hab's mal aus Droopy's Codeschnipsel extrahiert. Da dort ein API-Aufruf
ist wirds nicht direkt unter der Demoversion laufen.

Code: Alles auswählen

Structure MEMORYSTATUS
  dwLength.l
  dwMemotyLoad.l
  dwTotalPhys.l
  dwAvailPhys.l
  dwTotalPageFile.l
  dwAvailPageFeile.l
  dwTotalVirtual.l
  dwAvailVirtual.l
EndStructure

Procedure _GlobalMemoryStatusTotalPhys()
  Memory.MEMORYSTATUS
  GlobalMemoryStatus_(@Memory) 
  ProcedureReturn Memory\dwTotalPhys /1024/1024
EndProcedure

Debug  _GlobalMemoryStatusTotalPhys()
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Danke ts :oops: War aber trotzdem nicht mein Schreibfehler :lol:

@Friedrichs
Dann probier mal den Spass mit den Druckereinstellungen in Windoof98
aus. Da muss man eben alles umständlicher machen als unter XP.
Ebenso gibt es Unterschiede bei den Movie-Funktionen, wenn man
Fotos aus einem Film heraus machen will.

Viele Fehler liegen im Windoofen verborgen, darum ist es schwierig zu
sagen ob dieses oder jenes ein Bug ist.

Ich kann mir sehr gut vorstellen, wie Fred schwitzt um es unter
allen Plattformen anzupassen . :mrgreen:
Zuletzt geändert von Falko am 18.02.2006 18:14, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Gesperrt