今日、私はCコードで私の友人を助けていましたが、私は彼になぜそれが起こったのか説明できないという奇妙な振る舞いを見つけました。 TSVファイルには整数のリストがあり、各行にはintが付いています。最初の行はリストの行数です。配列型とmallocで割り付けられた配列の相違
また、非常に単純な「readfile」を持つcファイルもありました。最初の行は、nに読み出された行の数が、そこの初期た:
int list[n]
、最後に関数fscanfのnのforループ。
小さなn(〜100.000)の場合は、すべて問題ありませんでした。しかし、nが大きかった(10^6)と、segfaultが発生することがわかりました。
最後に、私たちも非常に大きなnは、
int *list = malloc(n*sizeof(int))
、すべてのリストの初期化を変更したときも。
これがなぜ起こったのか誰かが説明できますか? list = malloc(n * sizeof(int))の使用を開始したときに止められたint list [n]でsegfaultを引き起こしていたのは何ですか?
非常に解明的な答え...ありがとう! –
偉大な答え!スピードの違いもあるのだろうか? –
参照の局所性の影響により、スタック割り当て配列がアクセスする方が高速で、 'malloc'自体がスタックポインタをバンプするよりもはるかに遅いと思われます。しかし、実際には、手近な課題に対してより適切なアプローチを使用することが最善です。 – templatetypedef