Heap Größenbeschränkung C
Ich habe eine Frage bezüglich heap-in der Programmausführung layout-Diagramm einer C-Programm.
Ich weiß, dass alle dynamisch zugewiesenen Speicher zugeteilt, in Haufen, die wächst dynamisch. Aber ich würde gerne wissen, was ist die max-heap-Größe für ein C-Programm ??
Bin ich einfach anbringen ein Beispiel C Programm ... hier bin ich versucht zu reservieren, 1GB memory, string und sogar die memset ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *temp;
mybuffer=malloc(1024*1024*1024*1);
temp = memset(mybuffer,0,(1024*1024*1024*1));
if( (mybuffer == temp) && (mybuffer != NULL))
printf("%x - %x\n", mybuffer, &mybuffer[((1024*1024*1024*1)-1)]]);
else
printf("Wrong\n");
sleep(20);
free(mybuffer);
return 0;
}
Wenn ich über das Programm in 3 Instanzen auf einmal, dann malloc ausfallen sollte mindestens in einem Fall [ich bin so] ... aber immer noch malloc erfolgreich war.
Wenn es erfolgreich ist kann ich wissen, wie das OS kümmert sich um 3GB von dynamisch zugewiesenen Speicher.
InformationsquelleAutor codingfreak | 2009-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Maschine ist sehr wahrscheinlich overcomitting auf RAM und nicht mit dem Speicher, bis Sie tatsächlich schreiben. Schreiben Sie zu jedem block nach der Zuweisung von it -, so zwingt das Betriebssystem, um sicherzustellen, es ist echtes RAM zugeordnet, um die Adresse
malloc()
zurückgegeben.Ich wollte versuchen, die memset auf die eingesetzte dynamische Speicher ... scheint es ok wenn ich 2 Instanzen
Schriftlich würde nichts ändern und nur Kraft der kernel austauscht. Wenn die swap-und die RAM voll sind, linux-kernel startet, beenden von Prozessen (xenotime.net/linux/doc/swap-mini-howto.txt). Also zu meinem wissen, Sie werden nicht immer finden eine NULL zurückgegeben, die durch malloc, weil das system ist der PHYSISCHE Speicher. Sie können aber auch eine NULL zurückgegeben, die durch malloc, weil Ihr Prozess verwendet wird "zu viel" von seinen virtuellen Adressraum. Es ist gut hier erklärt: duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory
InformationsquelleAutor unwind
Malloc aus der linux-Seite,
InformationsquelleAutor lorenzog
Malloc wird den Speicher aber nicht schreiben. Also, wenn der virtuelle Speicher verfügbar ist, dann wird es gelingen. Es ist nur, wenn Sie etwas schreiben, wird es die realen Speicher müssen ausgelagert werden, um die Seite Datei.
Calloc, wenn der Speicher dient, korrekt(!) schreiben Nullen auf jedes byte des reservierten Speicher vor der Rückgabe, so müssen die Zuordnung der Seiten und dann.
InformationsquelleAutor AnthonyLambert