Segmentation Fault (Fortranのプログラム)に関して質問です。
あるデータを処理するプログラムですが、小さなデータの場合問題ないですが、
大きなデータを扱うようになった場合Segmentation Faultとなります。
宣言している配列サイズを超えた部分のアクセスなどでSegmentation
Faultが出ることがあるようですが、どうやらそのような現象ではなく、
メモリ制限にひっかかっている感じがいたします。
エラーが出る部分はどうやらSubroutine内の大きなデータ宣言を
している部分のようです。(下の例ではtest bが表示れる以前に止まります。)
!--------------------------------------------------
subroutine calc_tri( )
implicit none
real*8 data1(3,200000) !<--- ここでエラー -->
write(6,*) 'test b'
!--------------------------------------------------
このような場合、配列データを減らす以外にどのような対策が
あるのでしょうか?
あるいはメモリ制限になりそうなデータ数が分る方法などあります
でしょうか?
環境は
linux (CentOS)
intel Fortran Compiler version 8.0
Mem: 1GB
topコマンドにて Memの使用割り合いは10%にもならないのですが
コンパイラによるメモリ制限などもあるのでしょうか?
subroutine内の配列の宣言はデータ数より多くとっていることは確認しています。
No.1ベストアンサー
- 回答日時:
スタックオーバフローを起こしているのでは。
ulimitとかでスタックサイズを引き上げるか、ALLOCATABLEな配列にしてヒープ領域を使うようにするとか。
皆様
回答ありがとうございます。用語や対策などについて色々勉強になります。
教えていただいた用語などを自分なりに調べて理解したいと思います。
ulimitに関しては制限をゆるくした状態で実行していました。
(記載していませんでした。)
プログラムの止まる部分ですが、投稿に記載した部分に間違いがありました。
!--------------------------------------------------
subroutine calc_tri(cpsn)
implicit none
integer cpsn
real*8 data1(3,cspn) !<--- ここでエラー -->
write(6,*) 'test b'
!--------------------------------------------------
cspnにはデータ数が入りまして、Fortranではこのような引数を用いてデータ
サイズを確保する方法がとれますよね?
上記でも小さなデータの場合は問題ありませんが、大きなデータでは何故か問題が
出ます。下記のようにすればSegmentation Faultはでなくなりました。
real*8 data1(3,200000)
!データ数は195000
cspnの値はsubroutine読みだし前に書き出した段階では正常な値でした。
メモリをたくさん使ったときにcspnの値がおかしくなったのでしょうか?
----------------------------------------------------------------------
No.2
- 回答日時:
stack sizeかdata segment sizeの制限に到達したのでしょう。
ulimitないしlimitで制限値を変更できるようです。
"Google Answers: Understanding ulimit output"
http://answers.google.com/answers/threadview?id= …
「メモリの使用量を制限するには」
http://www.atmarkit.co.jp/flinux/rensai/linuxtip …
ありがとうございます。
ulimitは使用していましたが、教えていただいたページではulimitの色々な使い方が掲載されていていいですね。
No.1さんへの回答で記載のようにとりあえずエラーはでなくなりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- その他(プログラミング・Web制作) 大学のゼミのレポートがムカつきます。 R言語というデータ分析に特化したプログラム言語を用いた授業の課 1 2023/06/29 00:50
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- フリーソフト DVDshrink メモリリソースが足りません。 2 2022/08/16 23:22
- フリーソフト DVDshrink メモリリソースが足りません。 1 2022/08/16 23:17
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
メモリのセグメント違反の解決方法を教えてください。
C言語・C++・C#
-
fortranでプログラムを実行するとEnd of fileと表示されてしまいます
その他(プログラミング・Web制作)
-
fortranでのNaNについて
その他(プログラミング・Web制作)
-
-
4
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
-
5
FORTRANの実行エラーについて
その他(プログラミング・Web制作)
-
6
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
7
C言語 配列の長さの上限
C言語・C++・C#
-
8
fortran if文
その他(プログラミング・Web制作)
-
9
フォートランで出力をタブ区切りテキストの形式でしたいのですが
その他(プログラミング・Web制作)
-
10
C言語のポインターに関する警告
C言語・C++・C#
-
11
TOPコマンドで表示するCPU使用率で100%以上の表示について
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
配列の要素がすべてカラかどう...
-
配列の中の最大値とそのインデ...
-
Redim とEraseの違いは?
-
Excelマクロ:配列データからグ...
-
C言語 ポインタと配列
-
vba フィルター 複数条件 3つ以...
-
CheckBoxの配列化
-
VBで重複しているデータをユニ...
-
エクセルVBAからNotesでメー...
-
エクセルの列一括書き込み
-
定数配列の書き方
-
エクセル(VBA)の空白配列の削除...
-
DBから取得した値を配列へ代入する
-
配列の中から最大値だけ取り出...
-
pictureboxの名前を変数で設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報