Frage zu Speicherallozierung



  • Huhu,

    über malloc kann man ja laut meinem buch speicher reservieren...

    was passiert denn jetzt wenn ich einfach 1024MB speicher alloziere...

    sind dann nach ausführung des programms direkt 1024MB weniger arbeitsspeicher verfügbar, weil sie von dem programm belegt/ reserviert sind?

    greez

    haimi



  • Kuckuck!

    Haimi schrieb:

    ...sind dann nach ausführung des programms direkt 1024MB weniger arbeitsspeicher verfügbar, weil sie von dem programm belegt/ reserviert sind?

    greez

    haimi

    Beim Start bekommt dein Programm vom Betriebssystem eine gewisse Anzahl Bytes für Stack und Heap zugewiesen.
    Wenn die Anforderung durch malloc diese Anzahl übersteigt, wird mehr Arbeitsspeicher für diese Reservierung benötigt. Bei 1024MB kannst du davon ausgehen, das der Größte Teil davon im Arbeitsspeicher weniger verfügbar sein wird. Die Anzahl der vom Programm belegten Bytes kannst du dir unter Windows im Taskmanager angucken:

    int main () { 
    	char* c=0;
    	int n = 1024000000;
    	puts("Programm im Taskmanager suchen und die Speicherauslastung checken.");
    	puts("Zahl merken und in diesem Fenster die Entertaste druecken.");
    	getchar();
    	if( NULL == (c = malloc (n)))
    	{
    		puts("Zu wenig RAM!");
    		return 0;
    	}
    	while ( n>0 ) c[--n] = 0; // Damit das System auch wirklich Speicher reserviert.
    
    	puts("Programm im Taskmanager suchen und die Speicherauslastung checken.");
    	puts("Aktuelle Speicherauslastung mit der gemerkten Zahl vergleichen.");
    	getchar();
    	free(c);
    	return 0;
    }
    

    Gruß,
    B.B.



  • thx, sehr interessant was da so im inneren abläuft ^^


Log in to reply