-1

私はint flags[(1<<20)];配列を持っていますが、何か問題があるようで、セグメンテーション違反が発生します。これはスタックオーバーフローの問題ですか? スタックサイズをどのくらいに設定する必要がありますか?

4

2 に答える 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 に答える