2011-01-12 6 views
3

Bedenken Sie, dass mein System Speicher hat, aber es ist an verschiedenen Stellen verstreut (fragmentiert). Es gibt keine vier zusammenhängenden Speicherplätze, die frei sind. In diesem Szenario, was passiert, wenn ich ein Zeichen-Array der Größe 10 in der C-Sprache deklariere?Array in einem System mit eingeschränktem Speicher

Antwort

8

Wenn „mein System hat Gedächtnis, aber es ist in verschiedenen Orten (fragmentiert) verstreut“ bedeutet, dass heap virtual memory fragmentiert ist, und „deklarieren ein Zeichen-Array der Größe 10“ bedeutet, dass Sie Zeichen-Array erstellen die Größe 10 in stack memory:

char str[10]; 

, wird Array erfolgreich erstellt werden.

Wenn "deklarieren ein Zeichenarray der Größe 10" bedeutet, daß man Speicher mit malloc() zuzuordnen (zuzuteilen in Heap):

char *str2; 
str2 = (char*) malloc(10 * sizeof(char)); 

, dann malloc() wird NULL zurückgeben.

+0

Okay. Danke für deine Antwort! –

2

Wenn alle Ihre Speicher mit dem Stapel wie diese fragmentiert ist, können Sie entweder ein Compiler (oder Runtime-System), die nicht zusammenhängende Stapel-in denen unterstützt Fall es Macht auch intelligent genug, um zu unterstützen, nicht zusammenhängende Arrays - oder im Grunde alles, was Sie tun (wie das Aufrufen von Unterprogrammen), führt zu einem Stapelüberlauf und zum Absturz Ihres Programms.

+0

Okay. Vielen Dank für Ihre Antwort. Bei einem fragmentierten Stack scheint also ein Compiler, der nicht zusammenhängende Stacks unterstützt, das Problem zu lösen. Unterstützt GCC nicht zusammenhängenden Stapel? Können Sie mir einen guten Compiler-Typ mitteilen, der nicht zusammenhängende Stapel unterstützt? –

Verwandte Themen