実現したいこと
要素数2^20以上の静的配列を確保する
前提
n個の素数を小さい方から探索し、配列に格納するコードを書いています。
セグフォが出たのですが配列への不正アクセスは見つからりませんでした。
配列サイズが大きすぎることが原因なのでしょうか
該当のソースコード
この後に処理があるのですが、明らかにここに問題があると思われますので、抜粋して載せます。
C++
1#include <cstdint> 2 3int main() { 4 5 const uint64_t n = 1 << 20; 6 uint64_t p[n] = {2}; 7 8 return 0; 9} 10
試したこと
要素数10^6までは確保が可能でした。
また、動的配列では2^20以上確保が可能でした。
補足情報(FW/ツールのバージョンなど)
g++ 10.2.1 (Debian 10.2.1-6)
> 要素数10^6までは確保が可能でした。
スタックの容量がそのくらい、ということなのでしょう。
ありがとうございます、解決しました
ちなみにですが、static を付けるとヒープに確保されます。(動的確保と同じ)
static uint64_t p[n] = {2};
staticつけたら.dataか.bssであって、heapではないです
なるほど、staticで確保するとheep, stack以外のメモリ領域を使えるということですか
> matukeso さん
ご指摘ありがとうございます。
> iFQ7Vj さん
すみません、間違った事を伝えてしまいました。
staticを使うと他のメモリ領域も有効に使えそう、ということが知れて嬉しい限りです
お二人ともありがとうございました
> root以外のユーザーが利用出来るスタックには上限
「hard stack」と「soft stack」の値を大きくするとか (それ以外に回避方法が無い場合は)
https://www.ibm.com/docs/ja/streams/4.2.0?topic=guidelines-updating-ulimit-settings

回答1件
あなたの回答
tips
プレビュー