AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C++ Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

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

Offene Frage von "Zacherl"
Ein Thema von Michaell · begonnen am 12. Mär 2018 · letzter Beitrag vom 15. Mär 2018
Antwort Antwort
Seite 6 von 6   « Erste     456
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.624 Beiträge
 
Delphi 2009 Professional
 
#51

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

  Alt 14. Mär 2018, 21:43
Hier ist ein komplettes C++ Beispiel-Programm dass auch das Speicherproblem betreffen/lösen könnte. Link-Quelle ist MSDN.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.529 Beiträge
 
Delphi 10.1 Berlin Starter
 
#52

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

  Alt 14. Mär 2018, 22:00
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 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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.624 Beiträge
 
Delphi 2009 Professional
 
#53

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

  Alt 14. Mär 2018, 22:31
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.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.758 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#54

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

  Alt 15. Mär 2018, 07:30
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (15. Mär 2018 um 07:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.529 Beiträge
 
Delphi 10.1 Berlin Starter
 
#55

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

  Alt 15. Mär 2018, 11:40
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf