WINDOWS XP home edition , VC++ 6.0 を使用しております。
for文について皆様にお聞きしたいのですが、私のプログラムでは600回
for文で回す箇所があります。300回くらいまでは同速度で回るのですが、
300回を過ぎると極端に速度が低下してしまいます。
このようなときに考えられる原因、対策などをご教授していただけませんか?
for文の中身しだいでいかようにも変わります
中身を説明しましょう?
論より証拠と言いますし、
まずは簡単なテストパターンから初めてどういう処理をやると
遅くなるのかと言う検証をされた方がよろしいかと。
この辺は、自分で実験すれば結果は直ぐ出るものですし、
そこまでやってその結果を持って質問された方がいいと思います。
今の質問内容では漠然としすぎていて答えようが有りません。
せめてループ内で何をやっているのかがわかる程度の情報は
公開してもらわないと回答する側は当て推量で答えるしかありません。
有難うございます。
どう説明したらいいか、いい言葉が見つかりませんが、
現在defineで定義した値(#define a 0.005)を(#define a 0.5)と値を大きくしたと
きに上述の症状が見られます。
(#define a 0.005)の場合ですと、同速度で起動しています。
なお、for文の中にはaが含まれています。
そのaがどのような使われ方をしているかに解くカギがあると見た。
というわけで、具体的にどう使われているのか示してください。
for文って
for(;;){
a=a+b ←ここ
}
こんな感じのこと記述するよね
>ここ
の部分では何をしているのかな?
只の計算、ファイルIO
さて何でしょう
すいません。皆様有難うございます。
ちょっと長くて表現しにくいのですが、
要約しますと
1.パターンを600個用意。
2.
for(;;下の処理を600回違ったパターンで繰り返す){
for(;;cを更新してある値以下までこの処理を繰り返す){
for(;;){
c=d-a(さきほどのパラメータ)*b
}
}
}
1.パターンを600個用意。
2.
for(;;下の処理を600回違ったパターンで繰り返す){
for(;;cを更新してある値以下までこの処理を繰り返す){
for(;;){
c=d-a(さきほどのパラメータ)*b
}
}
}
3.bもパラメータです。
ものすごく長いと言うなら話は別ですが、
掲載可能な量であれば、省略しない方がいいです。
どう省略していいかわからないのであれば、なおさら。
あと、おもうんですが、
forループを三つもネストしているのだから、
実際の計算量は600回ではないのではないですか?
内部のループ回数が親ループ内の計算結果に依存していれば、
計算結果次第ではループ回数はいくらでも膨らみます。
すいません。省略が難しいため、どうにかご了承ください。
WINDOWSから仮想メモリの最小値が低すぎると警告が出ています。
これも原因の1つなのかと考えるのですが?
newやmallocで確保したメモリはdeleteやfreeで適宜解放しましょう、という話では。
> newやmallocで確保したメモリはdeleteやfreeで適宜解放しましょう、という話では。
で、逼迫したメモリをなんとかしようとdisk-swapが発生しはじめた、とか。
あらら、そうなるともう想像でしかアドバイスできないので
そのつもりでお願いします。
提示された内容からどうにかしろと言われても
回答者は超能力者ではないので。
私も後はメモリの解放漏れでメモリが逼迫ぐらいしか
考えつきませんねぇ。
解放すべきものを解放していなくてそういう事態になっているのか、
それとも確保するべくして確保しているのだけれど、メモリが絶対的に足りないのか。
なんかここの部分が引っかかっているんですけど
>for(;;cを更新してある値以下までこの処理を繰り返す){
誤差関係の話でしょうか?
皆様有難うございます。
メモリが絶対的にたりないのかもしれません。
プログラムが長いです。
>誤差関係の話でしょうか?
その部分は誤差関係の話しです。