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.
Thema durchsuchen
Ansicht
Themen-Optionen

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 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

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

  Alt 12. Mär 2018, 10:50
Ich hab 2,32GB als benötigte Daten-Menge, ich glaub bei 2,5GB ist mit 32bit Schluß?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#2

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

  Alt 12. Mär 2018, 10:56
Ich hab 2,32GB als benötigte Daten-Menge, ich glaub bei 2,5GB ist mit 32bit Schluß?
Danke, das würde das Ganze erklären. Das meine Rechnung:
8832 * 8832 = 78.004.224 Pixel
Fuer Farbdarstellung benoetigt man 3 bit per Pixel und somit sind es 234.012.672 bit = 29.251.584 byte = 27 MiB
nicht stimmen konnte dachte ich mir schon, es ergab keinen Sinn in Bezug auf den Fehler. Ich weiß darüber einfach zu wenig.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 12. Mär 2018, 11:00
Fuer Farbdarstellung benoetigt man 3 bit per Pixel
Je nachdem was für elaborate Formate du einsetzt kann man das sicherlich schaffen, aber bei einer stinknormalen TBitmap hätte ich jetzt eher auf 4 Byte pro Pixel getippt.
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 12. Mär 2018, 11:16
Der Speicher muss aber auch zusammenhängend frei verfügbar sein wenn er angefordert wird
insofern ist die Windows Anzeige von Freiem Speicher nicht aussagekräftig

mfg Hannes
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

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

  Alt 12. Mär 2018, 11:34
Der Speicher muss aber auch zusammenhängend frei verfügbar sein wenn er angefordert wird
Das ist der Knackpunkt!

Eventuell könntest du dein Bitmap in 4 (oder noch mehr) Quadranten einteilen und bei der Anzeige wieder zusammensetzen? Dann würde es reichen mehrere nicht-zusammenhängende kleinere Speicherblöcke zu reservieren. Und 24- bzw. sogar 32-Bit pro Pixel sind tatsächlich Standard unter Windows, also kommst du auf knapp 300MiB bei deiner Bildgröße.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 12. Mär 2018, 11:59
Zitat:
Alle PCs haben 4 GiB RAM
Erstmal hast du ein 32 Bit-Programm und diese haben standardmäßig nur einen virtuellen Speicher von 2 GB.
Kann per Compiler-Befehl auf 3 GB (32 Bit Windows) oder fast 4 GB (64 Bit Windows) erhöht werden. Vielleicht reicht das bei dir aus.

Windows hat auch noch eine Auslagerungsdatei, womit die 4 GB physicher RAM im globaler Speicher mehr sind.
Selbst bei 1 GB RAM kann ein Programm diese 2 GB nutzen (wenn genügend freier Speicher inkl. Pagefile vorhanden sind)

Und wie bereits erwähnt liegt beim BITMAP der Speicher als ein zusammenhöngender Block vor und da wird es in 32 Bit-Programmen ab durchschnittlich 250-300 MB schnell eng,
zwischen all den geladenen DLLs, der EXE und dem restlichen genutzten Arbeitsspeicherstückchen, sind nur selten größere Bereiche verfügbar.

Im FastMM oder Hier im Forum suchenHxD kannst du dir das leicht ansehn.
https://stackoverflow.com/questions/...elphi-applicat
https://mh-nexus.de/de/hxd/

Die Executables (DLL/EXE) liegen nicht immer auf der selben Adressen.
https://en.wikipedia.org/wiki/Relocation_(computing)
Und auch der restliche dynamische Speicher wird mehr "zufällig" verteilt reserviert.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Mär 2018 um 12:07 Uhr)
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#7

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

  Alt 12. Mär 2018, 13:10
Danke himitsu, von Deinen Aussagen ist die hier nach meiner derzeitigen Meinung der Knackpunkt:
...
Und wie bereits erwähnt liegt beim BITMAP der Speicher als ein zusammenhöngender Block vor und da wird es in 32 Bit-Programmen ab durchschnittlich 250-300 MB schnell eng, zwischen all den geladenen DLLs, der EXE und dem restlichen genutzten Arbeitsspeicherstückchen, sind nur selten größere Bereiche verfügbar.
Weil das Problem nicht immer auftritt und öfters ein Neustart des betroffenen PCs reicht um keinen Fehler zu bekommen.
Das Problem ist also:
Ich habe im 2 GiB Virtuellen-Adressraum meines Programms öfters mal keinen zusammenhängenden Bereich von 297.5625 MiB (8832 * 8832 * 4 Bytes) übrig um meine Speicheranforderung zu bedienen.
Lösungsmöglichkeit:
Das Problem kann evtl. dadurch umgangen werden, das man dem Compiler mitteilt, das er 3 GiB Virtuellen-Adressraum nutzen soll.

OK, ich werde sehen wie ich das hinbekomme und Melde mich dann.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 12. Mär 2018, 11:17
Also meine Angabe da oben bezieht sich auf ein Standard 32bit (4 byte pro Pixel) Format, keine Eigenkreation.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#9

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

  Alt 12. Mär 2018, 11:38
Also meine Angabe da oben bezieht sich auf ein Standard 32bit (4 byte pro Pixel) Format, keine Eigenkreation.
OK, dann ergibt sich 8832 * 8832 * 4 byte = 312.016.896. Das Ganze ist dann 32 Bit aligned also 312.016.896 * 4 = 1.248.067.584 Bytes = 1190.25 MiB. Da fehlen mir jetzt aber 50% Deiner 1sten Angabe von 2,32 GB ...
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

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

  Alt 12. Mär 2018, 11:51
OK, dann ergibt sich 8832 * 8832 * 4 byte = 312.016.896. Das Ganze ist dann 32 Bit aligned also 312.016.896 * 4 = 1.248.067.584 Bytes = 1190.25 MiB. Da fehlen mir jetzt aber 50% Deiner 1sten Angabe von 2,32 GB ...
Keine Ahnung von was du da redest, aber ein Bitmap in der Größe mit 32 Bit sind ~300 MB.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz