4

私のプログラムは、1 MB 以上を使用せずにメモリ エラーを返します。dev-cpp コンパイラで C を書きます。元のプログラムは大きすぎてここに置くことができません。この非常に単純なプログラムは私にとってはうまくいきます:

int main(){int a[520076]; return 0;}

値 0 を返します。ただし、これは次のとおりです。

int main(){int a[520077]; return 0;}

動作しません。理由はメモリです。Windows 8 を使用していますが、Windows 7 でも同じ問題が発生します。プロセスが使用できるメモリ領域にシステムが制限を加えているようです。dev-cpp で境界を設定することもできますか?

4

1 に答える 1

5

システムが最大のメモリ領域を配置しているようです

はい、しかし、これはこの場合の問題ではありません。宣言する配列はローカルで自動であるため、スタックに割り当てられる可能性が最も高くなります。スタックスペースは限られており、動的に割り当てられたメモリ (通常はヒープ上にあります) よりもさらに制限されており、サイズが数メガバイトあるため (私の記憶が正しければ、Windows ではデフォルトで実際には 1 MB です)、すぐに他のメモリと衝突します。メモリ領域。

これを望まない場合は、変数をファイル スコープ (「グローバル」) 変数またはstatic(副作用を参照) として宣言します。

また、OSもすべてのメモリを制限しているという点で、あなたは正しいです-プロセス間の民主主義を維持しようとします。128 ギガバイトの RAM を搭載したサーバーでプログラムを実行しても、malloc()たとえば 32 ギガバイトを割り当てようとすると失敗する可能性があります。一般に、それほど多くのメモリは必要なく、OS は他のプロセスを誤って (または意図的に) リソースを消費することから保護します。

于 2013-03-30T12:20:47.347 に答える