2011-01-12 36 views
3

請考慮我的系統有內存,但分散在不同的地方(碎片)。沒有四個連續的存儲位置是免費的。在這種情況下,如果我在C語言中聲明一個大小爲10的字符數組,會發生什麼?內存受限系統中的陣列

回答

8

如果「我的系統內存,但它是分散在不同地方的(斷裂)」意味着,heap virtual memory是零散的,「聲明大小爲10的字符數組」手段,您創建的字符數組在stack memory

char str[10]; 

,然後數組將成功創建。

如果「聲明大小爲10的字符數組」手段,您使用malloc分配存儲器()(在堆上分配):

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

,然後malloc()函數將返回NULL。

+0

好的。 Thx爲您的答覆! – 2011-02-05 01:00:00

2

如果您的所有內存(包括堆棧)都是這樣碎片化的,那麼您可以使用支持非連續堆棧的編譯器(或運行時系統) - 在這種情況下,它可能會支持非連續數組 - 或者基本上你做的所有事情(比如調用子例程)都會導致堆棧溢出並導致程序崩潰。

+0

好的。感謝您的答覆。因此,在分割堆棧的情況下,支持非連續堆棧的編譯器似乎可以解決這個問題。 gcc是否支持非連續堆棧?你能告訴我一個支持非連續堆棧的良好編譯器風格嗎? – 2011-02-05 01:03:16