Heap Speicherreservierung
-
Hallo,
ich möchte (Testwiese) Speicherreserviern. Dazu hab ich mir ein Formular ein Button und diese Funktion gebastelt:
HGLOBAL hMem[50]; void __fastcall TForm1::Button1Click(TObject *Sender) { long long end = 64*1024*1024; hMem[z] = GlobalAlloc( GMEM_MOVEABLE , 64*1024*1024*sizeof(unsigned int)); unsigned int *x = (unsigned int *) GlobalLock(hMem[z]); for (long long i = 0; i < end; i++) { x[i] = i; } GlobalUnlock( hMem[z]); z++; Label1->Caption = z; }
Leider kann ich nur 4x (=1GB) an Speicher anfordern, dann kommt von GlobalAlloc ein Nullzeiger zurück. Eigentlich hätte ich die grenze bei 2,3,oder 4 GB erwartet. Ich will eigentlich nur verstehen warum die Grenze bei 1GB liegt.
OS: Win7 64bit
C Builder 2007
-
AntonWert schrieb:
Ich will eigentlich nur verstehen warum die Grenze bei 1GB liegt.
Speicherfragmentierung.
-
Wieviel Speicher hat der Rechner? Und wieviel davon ist frei? (Bei 64-Bit OS und Programm sollten auch mehr als 4GB gehen, wenn halt genug Speicher frei ist.)
Ein Problem könnte sein, dass er keinen Bereich mehr findet, der groß genug für 256MB am Stück wäre. Versuch mal kleinere Stücke anzufordern, dass müsste dann noch etwas weiter gehen.
-
Der Rechner hat 16GB davon sind akutell lt. Task-Manager 3,5GB belegt, also mehr als genug frei.
Ist die Reservierte Blockgröße auf 32MB4 reduziert, dann auch ist nach 12 erfolgreichen Blöcken = 1536MB schluss.
Bei einer Blockgröße von 16MB4, ist nach 26 erfolgreichen Blöcken = 1664MB schluss.Bisher bin ich davon ausgegangen dass jedem Programm ein virtueller Speicher zur verfügung steht der weder fragmentiert, noch in der Größe auf 1,5GB begrenzt ist.
-
lagalopex schrieb:
Wieviel Speicher hat der Rechner? Und wieviel davon ist frei? (Bei 64-Bit OS und Programm sollten auch mehr als 4GB gehen, wenn halt genug Speicher frei ist.)
Der 2007er Builder ist ein 32Bit Programm.
Ich habe jetzt nicht auf die neuesten Entwicklungen geschaut. Gibt es eigentlich schon eine 64Bit Version des C++Builders?
-
Braunstein schrieb:
lagalopex schrieb:
Wieviel Speicher hat der Rechner? Und wieviel davon ist frei? (Bei 64-Bit OS und Programm sollten auch mehr als 4GB gehen, wenn halt genug Speicher frei ist.)
Der 2007er Builder ist ein 32Bit Programm.
Ich habe jetzt nicht auf die neuesten Entwicklungen geschaut. Gibt es eigentlich schon eine 64Bit Version des C++Builders?
Ja, ich glaube bei RAD Studio 4 wurde der 64-bit compiler eingeführt.