Ubuntu で C++ プログラムを作成しました。メイン関数には、次のような 2 次元配列があります。
int main() {
unsigned long long int s[11000][100];
// some code to manipulate with s (just for initialization)
// ...
}
そして、プログラムは実行できませんでした。Web を検索した後、2 次元配列のサイズが Ubuntu のデフォルトのスタック サイズである約 8 MB を超えていることがわかりました。プログラムでスタックサイズを自動的に変更する提案をいくつか試しました。そこで、数行のコードを追加しました。
int main() {
unsigned long long int s[11000][100];
const rlim_t kStackSize = 32 * 1024 * 1024;
struct rlimit rl;
int result;
result = getrlimit(RLIMIT_STACK, &rl);
if (result == 0) {
if (rl.rlim_cur < kStackSize) {
rl.rlim_cur = kStackSize;
result = setrlimit(RLIMIT_STACK, &rl);
if (result != 0) {
printf("error\n");
}
} else {
printf("error\n");
}
// some code to manipulate with s (just for initialization)
// ...
} // end main
しかし、まだセグメンテーション違反 (コア ダンプ) エラーが発生します。スタック サイズも確認しました。現在、そのサイズは 32 MB で、2 次元配列のサイズの 4 倍です。また、スタック サイズを RLIM_INFINITY に設定しようとしましたが、再び失敗しました。理由と解決策を教えてくれる人はいますか?どうもありがとう!