2011-01-12 5 views
3

私のシステムはメモリを持っているが、別の場所に分散している(断片化している)と考えてください。空いている4つの連続したメモリロケーションはありません。このシナリオでは、C言語でサイズ10の文字配列を宣言するとどうなりますか?メモリが制約されたシステム内の配列

答えて

8

場合は、「私のシステムは、メモリを持っていますが、別の場所で(断片化)散乱される」heap virtual memoryが断片化されていることを、手段、およびあなたは文字配列を作成することを、手段「サイズ10の文字配列を宣言します」サイズ10のサイズは、stack memory

char str[10]; 

であり、配列が正常に作成されます。

あなたはmalloc関数でメモリを割り当てること"サイズの文字配列を宣言10"手段、()(ヒープに割り当てた場合):

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

、その後のmalloc()はNULLを返します。

+0

大丈夫です。あなたの返信のためのTHX! –

2

スタックを含むすべてのメモリがこのように断片化されている場合は、非連続スタックをサポートするコンパイラ(またはランタイムシステム)を使用します。この場合、も不連続配列、または基本的には(サブルーチンを呼び出すなど)スタックオーバーフローが発生し、プログラムがクラッシュします。

+0

お返事をありがとうございます。したがって、断片化されたスタックの場合、非連続スタックをサポートするコンパイラが問題を解決するように見えます。 gccは非連続スタックをサポートしていますか?非連続スタックをサポートする良いコンパイラの味を教えてもらえますか? –

関連する問題