Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

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)

Michaell 12. Mär 2018 10:28

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

es gibt hier im Forum viele Anfragen zur Fehlermeldung:
Für diesen Befehl ist nicht genügend Speicher verfügbar.
bzw.:
Not enough storage is available to process this command.
Diese sind alle älter als 5 Jahre und ich konnte auch nichts "passendes" dazu finden:

Kürzlich mußte ich meine benötigte Bitmapgröße auf 8832 * 8832 Pixel erweitern. Beim Programmstart kommt nun bei manchen meiner Rechner (Windows 7, 32 Bit und Windows 10, 32 Bit) die obige Fehlermeldung. Der Trigger für die Fehlermeldung ist hier:
Code:
void __fastcall CBitmapImage::Init()
{
   // generate and init bitmap object
   Bitmap = new Graphics::TBitmap();
   Bitmap->Height = Height; // 8832 pixel
   Bitmap->Width = Width; // 8832 pixel
}
Bei der "Width" Zuweisung passiert es. Wenn ich das richtig berechnete habe, so würde ein 27 MiB Speicherblock benötigt. Klingt für mich nicht nach viel ...
noch ein paar Details:
  1. Mein Prog. belegt nach dem Start 265 MiB RAM.
  2. Alle PCs haben 4 GiB RAM und der ist nicht mal zur Hälfte gefüllt (von den ca. 3 GiB die verfügbar sind).
  3. Ich Verwende den C++ Builder 10.2 mit dem klassischen Compiler.
Wie kann ich dieses Problem beheben? Vielen Dank!

Grüße!

Michael

Der schöne Günther 12. Mär 2018 10:39

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Hinweis: Meiner Rechnung nach liegst du eine Zehnerpotenz zu niedrig was den Platzverbrauch angeht.

bra 12. Mär 2018 10:48

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
8832 * 8832 * 4 (32 Bit) = 312.016.896. Je nachdem wie das im Speicher liegt noch viel mehr. Irgendwas rechnest du da falsch.

KodeZwerg 12. Mär 2018 10:50

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Ich hab 2,32GB als benötigte Daten-Menge, ich glaub bei 2,5GB ist mit 32bit Schluß?

Michaell 12. Mär 2018 10:56

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

Zitat von KodeZwerg (Beitrag 1395839)
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.

Der schöne Günther 12. Mär 2018 11:00

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

Zitat von Michaell (Beitrag 1395840)
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.

hstreicher 12. Mär 2018 11:16

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
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

KodeZwerg 12. Mär 2018 11:17

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
 
Also meine Angabe da oben bezieht sich auf ein Standard 32bit (4 byte pro Pixel) Format, keine Eigenkreation.

Zacherl 12. Mär 2018 11:34

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

Zitat von hstreicher (Beitrag 1395843)
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.

Michaell 12. Mär 2018 11:38

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

Zitat von KodeZwerg (Beitrag 1395844)
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 ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 1 von 6  1 23     Letzte »    

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