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

Fragen und Bugreports zur PureBasic 4.0-Beta.
Christian
Beiträge: 73
Registriert: 31.08.2004 16:02

Beitrag von Christian »

Hi Friedrichs,

bei einem Memory-Problem kann ich dir zwar nicht helfen, aber da ich auch gerade dabei bin eine Datenbank über den Arbeitsspeicher anzulegen und zu verwalten interessiert mich das ganze hier auch. Deswegen wenigstens eine kleine Unterstützung von mir ...
Friedrichs hat geschrieben: Kann mir mal jemand den Text von Fred übersezten, dazu reicht es bei mir nicht
The problem here is you ask a big continous chunk of memory, which isn't sure to be reserved. Win98 is also known as being quite weak when dealing with a lot of memory..
"Das Problem hierbei ist, dass du einen großen zusammenhängenden Speicherbereich reservieren willst, der nicht mit Sicherheit reserviert werden kann. Win9 ist außerden bekannt dafür, dass es ziemlich schwach ist mit dem Verwalten von viel Speicher ..."

So wie ich das also verstehe liegt das Problem darin, dass du eine Menge an Speicher reservieren willst, der natürlich zusammenhängen soll. Wenn dein freier Speicher aber über den gesammten Speicherbereich verteilt ist und mal hier ein bisschen was frei und mal da ein bisschen was frei ist, Windows dir deine Speicheranfrage nicht erfüllen kann.

Gruß
Christian
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Danke erstmal für die Übersetzung.
Ich hatte zwar vermutet, das Fred das so in der Art meint, bin aber nun bestätigt.
Ich habe ihm schon versucht (mit ein paar englischen Stickwörtern) zu zeigen das er "sich irrt", da der Code KEINEN großen SPeicher erstellt. Der Fehler tritt be mir schon auf, wenn man nur 5 MB SPeicher reservieren will.
Er hatte den Code wohl weder getestet noch genau angesehen.

Der Fehler tritt unabhängig vom verbrauchten Ram auf, wie gesagt, bei mir ca. bei 5 MB (Systemmonitor bestätigt das).

Bin ja mal gespannt wann mal jemand unter Win 98 testet und bestätigen kann das dies schon bei wenigen MB auftritt.
1. Win10
PB6.1
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ich habs jetzt auch mal auf Win98 getestet.

Wenn man sich die Ausgabe anschaut, auf welche Adresse die Pointer
zeigen, fällt auf, das diese immer höher gehen.

Das muss folglich irgend wann zu einem Fehler führen, da irgend wann ja
das Ende des Speichers erreicht ist. Das passiert unter WinXP nicht. Aber
ich kann natürlich nicht sagen, ob es nur auf Win98 zurück zu führen ist.

Aber ich hab den selben Fehler bekommen. Allerdings kann man, wenn
man vorher nicht schon unzählige male Speicher resserviert hat, größere
Speicherbereiche resservieren. Hab einfach nen "Step 1000" in die For
Schleife gemacht, schon gings wesentlich weiter. :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
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 »

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
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 »

Na endlich !!! ;-)
Endlich hat jemand bemerkt was ich meine und es bestätigt.
Rauszögern kann man es etwas, aber das löst nicht das Problem.
Ich erstelle eine Datenbank die sich dynamisch anpaßt und da kann man einfach keine statischen Werte nehmen. Es war gerade der Grund das es dynamisch sein MUß der mich statt Arrays oder Listen die Memoryvariante nutzen läßt (auch wegen dem Tempo usw.)

Das Problem läßt sich bisher nicht umgehen und tritt im Grunde wohl in jedem Programm auf das Memory nutzt und die Größe ändert auf, früher oder später.

ich Weiß ja nicht wie die Positionsvergabe läuft, aber da steckt der Fehler. Je nachdem ob PB oder Windows die vergabe regelt (innerhalb des Programmspeichers) ist es ein PB- oder Windowsfehler.

Da PB aber intern unter XP und 98 wohl doch unterschiedlichen Code nutzt (konnte man an dem trymutex-bug sehen) denke und hoffe ich es liegt an PB. Dann kann man es wenigstens ändern, wäre wirklich Windows schuld, dann DARF man keine Memoryfunktionen nutzen. Und das kann ich mir nicht vorstellen.

[edit]
Die Ressourcenverwaltung ist gar nicht mal so das Problem, damit hat man gar nicht so ein Problem, es ist nur recht eingeschränkt im Vergleich zu NT. Aber die reine Speicherveraltung klappt normal und auch die Freigabe, ansonsten würde ja auch nach beenden von PB ein Fehler weiterbestehen. ich habe nicht den Eindruck das es daran liegt. In anderen Sprachen habe ich diesbezüglich auch noch kein Problem der Art die ich hier habe gefunden.
1. Win10
PB6.1
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

hast du ts-softs post nicht gelesen? O_o
Es ist demnach ein Bug unter Win98 ... eine Möglichkeit hat ts-soft ja auch
schon geschrieben, die nicht offizielle unterstützung von Win98 ...

Ich weis nicht was genau dein Programm macht... hattest es zwar glaub
ich hier im thread kurz angeschnitten ... aber bin jetzt zu faul das noch
mal zu lesen :D . Aber wäre es eine Möglichkeit, Prozesse dynamisch
zu verwenden?

Also spätestens wenn Speicher nicht mehr resserviert werden kann, wird
einfach ein neuer Prozess gestartet und der Alte beendet. Obwohl, wenn
s nur um große Speichermengen geht und nicht um viele kleine ... wäre es
wohl nicht Möglich, das ganze in Dateien oder änliches zu schreiben und es
dann mit dem nächsten Prozess wieder zu laden.

Naja, wie auch immer ... findest schon was, aber eine direkte Möglichkeit
mit Speicher gibt es so wohl nicht. Also Win98 wird damit nicht unterstützt,
was aber heute auch nicht mehr soooooooo tragisch ist :D . Vorallem
wenn man bedengt das du anscheinend ein Programm schreibst, das lange
laufen soll, warum sonnst sollte so oft neuer Speicher resserviert werden?

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

hast du meinen Beitrag nicht gelesen ist wohl eher die Frage ;-)
Das von TS-Soft ist eher ne Spekulation als ne Tatsache. Schließlich ist die RAM vergabe ja das grundlegende in einem Programm. Und das Problem würde dann ja von vorn herein bedeuten "nutze nie RAM" unter Win98, das geht ja nicht.
Und in einer anderen Sprache wo ich selbes teste geht es auch.
Ich denke eher, das PB intern was falsch macht. Solange Fred das nicht aufklärt gehe ich von einem PB-Bug aus.

Was meinst du mit "Prozesse dynamisch zu nutzen"?
Den Arbeitsspeicher will ich ja dynamisch nutzen und das geht nicht.
Ich erstelle eine Art Datenbank im Arbeitsspeicher.

Also das es geht sieht man daran, das alle anderen Programme laufen, auch PB an sich. Schließlich wird ihn fast gedem Programm ständig speicher allociert, freigegeben, geändert usw.
ICh bin davon überzeugt, das es n icht an Windows98 liegt. Vor allem da im Grunde selbiger Code unter ner anderen Sprache läuft und läuft und läuft (nur halt sehr langsam).

Umwege gehen kann man nicht, da dies zu langsam wäre und der Sinn den RAM zu nutzen dann verloren geht. Und es ist ja so, daß ich die Datenbank nicht m al erstellen kann, denn genau da geschieht der Fehler. Ich lege ca. 150 000 "Datensätze" an und das klappt halt nich solange ich es dynamisch mache. 150 000 Datensätze sind ja gerade mal 6-7 MB bei mir.

PB macht intern wohl je nach Betriebssystem (auch in der fertigen EXE) unterschiedliche Dinge. trylockmutex() zum beispiel lief korrekt unter XP, aber unter 98 gab es ein anderes Ergebnis (selber Code, selbe exe) und da wurde auch vermutet (es ist win98), es war aber ein Bug in PB.

Ich kann mir sogar vorstellen woran es liegt, grob natürlich nur. Kenne ja nicht die internen Funktionen. Aber auflösen kann das wohl nur jemand der den Quellcode von PB hat und das mal anschaut.

Und die Aussage "einfach nicht für WIn98 programmieren" ist wirklich dämlich. Dann dürfte es kein einziges Programm unter 98 gegeben haben das läuft.

Aber wichtig ist, das es nachvollzogen werden konnte bei dir und das es schon mal einer verstanden hat. Hoffe Fred oder die anderen bekommen das noch richtig mit.
1. Win10
PB6.1
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Friedrichs hat geschrieben: Und die Aussage "einfach nicht für WIn98 programmieren" ist wirklich dämlich.
Du solltest mal mit Rings diesbezüglich reden :mrgreen:
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 »

PB nutzt immer dieselben Libs unter Windows, egal ob Win98 oder XP, nur die
API ist eine andere, weil MS hier reichlich Verbesserungen einfgeführt hat,
die es in Win98 eben noch nicht gab.

Dafür, das Win98 den Speicher eben nicht sofort freigibt, im Gegensatz zu
XP, dafür kannste nur Billy verantwortlich machen, obwohl der zu dem Zeitpunkt auch nichts dafür konnte.

Meiner Meinung nach, ist dein Konzept einfach falsch.
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 »

Zu dem Konzept kannst du gar nichts sagen, da du es nicht kennst.
Aber es ist das einzig richtige. Es ist schnell genug und variabel.
Fakt ist, das es die einzige Möglichkeit bei mir ist große Datenmengen zu Speichern, zu verwalten und die Datenbanken in größe und Format zu ändern oder sogar zu löschen. Mit Listen und Arrays ist das so leider nicht möglich bzw. zu langsam.

Es bleibt also nur zu warten was die PB-Programmierer dazu sagen. Es kann natürlich ein Fehler von Windows98 sein, aber das können nur die sagen. Und z.b. TryLockMutex ist laut hilfe wohl eine interne PB-angelgenheit und nichts Globales. Es klang danach, das Fred da selbst was "erfunden" hat, keine Apifunktion also. Und (!) diese lief unter Windows98 anders als unter XP, solange bis Fred das in der Beta3 ausgebessert hat.

Wenn es nicht geht, würde es bedeuten, das man unter Windows98 NIE Allocatememory oder ReAllocateMemory nutzen sollte, denn es wäre extrem unsicher. Man könnte keinen Speicher erstellen, weil man nicht genau wüßte ob der auch erstellt wird und ein "auffangen" des Fehlers ist nicht wirklich möglich, weil man ab dem Punk keinen einzigen Speicher mehr erstellen kann. nicht mal ein Byte groß.

Und falls das wirklich ein grundlegendes Problem bei allocieren sein sollte, also wohl sogar eine Art Vorgabe von MS, dann sollte das doch mit in der Hilfe stehen.

Aber ob nun MS schuld ist oder nicht will ich hier nicht weiter diskutieren sondern wie man das beheben kann oder woran es nun genau liegt. Also mal schauen ob da einer ein paar Fakten zu hat.
1. Win10
PB6.1
Gesperrt