Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C++ Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar. (https://www.delphipraxis.net/195586-fehler-fuer-diesen-befehl-ist-nicht-genuegend-speicher-verfuegbar.html)

KodeZwerg 14. Mär 2018 21:43

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Hier ist ein komplettes C++ Beispiel-Programm dass auch das Speicherproblem betreffen/lösen könnte. Link-Quelle ist MSDN.

Zacherl 14. Mär 2018 22:00

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Zitat:

Zitat von KodeZwerg (Beitrag 1396161)
Hier ist ein komplettes C++ Beispiel-Programm dass auch das Speicherproblem betreffen/lösen könnte. Link-Quelle ist MSDN.

AWE löst das Problem leider ebenfalls nicht :P Damit kannst du zwar große Mengen physikalischen Speicher verwalten, aber dieser muss trotzdem in den virtuellen Adressbereich gemappt werden. Ist in Letzterem halt kein zusammenhängender Block in der entsprechenden Größe mehr frei, scheitert auch das.

KodeZwerg 14. Mär 2018 22:31

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
So ein Mist, ich hatte gehofft das man wenigstens über AWE (was ja das 2 GB limit sprengen kann) einen 300 MB block hinbekommt der keine Paging Fault verursacht.
Das Working Set auch nicht funktioniert kann ich auch noch nicht nachvollziehen aber ich halte mich jetzt da mal raus.
Mehr kann ich zu diesem Thema momentan nicht Beitragen.

himitsu 15. Mär 2018 07:30

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Warum hört niemand zu?


WorkingSet ist nur die nicht auslagerbare Menge, aber an der Gesamtmenge und der Verteilung ändert es rein garnichts.
Alternativ kann man auch direkt physischen Speicher reserveren und einbinden ... das macht keinen großen Unterschied. (hier sagt man nur "ich will genau diesen Speicherblock nie auslagen", während das WorkingSet sagt "ich will minimal/maximal einen so großen Anteil meines gesamten Virtuellen nie auslagern")

Auch andere Speicher-Erweterungen, wie AWE oder MMF, können zwar "zusätzlichen" Speicher reservieren, was nur "indirekt" mit der Belegung/Verteilung des virtuellen Speichers zu tun hat.
(der Speicher ist extern reserviert/belegt und muß nicht im Virtuellen eingebunden sein, aber wenn man ihn benutzen will, dann muß er ebenfalls da rein und schon ist das Problem wieder da)



Die einzige Lösung ist eine Defragmentierung des virtuellen Speichers.
Aber das ist nicht so einfach, da man dafür alle Referenzen auf die zu verschiebenen Blöcke kennen muß (wo es aber niemals 100% sicher eine komplette Liste geben wird) um die Zeiger anschließend mit anpassen zu können.
Oder man macht es wie die beim OutOfMemory. Dort wird gleich zu Programmstart ein kleiner Speicher "reserviert" (virtueller Bereich belegen, aber nicht mit physischem Speicher verbinden) und der wird vor Anzeige der Fehlermeldung freigegeben, dann der Speicher ist ja "voll", aber der Dialog braucht dennoch welchen, also hält man sich eine Lücke für den Notfall frei.

Letzteres (OutOfMemory) entspricht in etwa dem, was hier mit dem "ich mache das Bitmap vor den restlichen Fenstern" gemacht wird, außer dass hier kein "großer" Block reserviert wird, für den praktisch immer genügend Speicher verfügbar ist. und in dem praktisch niemals existierenden Fall, wo der Speicher nicht doch ausreicht, dann wäre das komplette Programm sowieso nicht lauffähig.

Zacherl 15. Mär 2018 11:40

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Zitat:

Zitat von himitsu (Beitrag 1396173)
Die einzige Lösung ist eine Defragmentierung des virtuellen Speichers.

Oder - wie bereits in Post #9 vorgeschlagen - einfach den umgekehrten Weg gehen und das Bitmap fragmentieren / in mehrere Teil-Bitmaps splitten.

Naja, ich klinke mich an dieser Stelle auch mal aus, der TE scheint ja sowieso seinen eigenen Weg gehen zu wollen :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Seite 6 von 6   « Erste     456   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz