私はint flags[(1<<20)];
配列を持っていますが、何か問題があるようで、セグメンテーション違反が発生します。これはスタックオーバーフローの問題ですか? スタックサイズをどのくらいに設定する必要がありますか?
質問する
293 次
2 に答える
0
そのサイズのint
配列は 4MB です。システムによっては、この数が大きい場合とそうでない場合があります。x86 Linux では、デフォルトのスタック サイズは通常 8 ~ 10MB ですが、他の Linux では異なる場合があります。
Linux では、次のコマンドでスタック サイズ (KB 単位) を設定できます。
ulimit -s 8192
ただし、これはすべてのプロセスのスタック サイズに影響するため、推奨されません。自分のプロセスのみのスタックサイズを増やすには、次を使用しますsetrlimit
Windows では、スタック サイズはリンク時に設定されますが、必要な状況でのみ増加する必要があります。
スタックは、小規模および中規模の変数にのみ使用してください。このような大きな配列の場合は、代わりにヒープに割り当てる必要があります
int *flags = malloc((1 << 20)*sizeof(int));
使用後は忘れずに解放してください
于 2013-11-06T02:50:33.413 に答える