for文について – プログラミング – Home

通知
すべてクリア

[解決済] for文について

固定ページ 1 / 2

kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

WINDOWS XP home edition , VC++ 6.0 を使用しております。
for文について皆様にお聞きしたいのですが、私のプログラムでは600回
for文で回す箇所があります。300回くらいまでは同速度で回るのですが、
300回を過ぎると極端に速度が低下してしまいます。
このようなときに考えられる原因、対策などをご教授していただけませんか?


引用未解決
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

for文の中身しだいでいかようにも変わります
中身を説明しましょう?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

論より証拠と言いますし、
まずは簡単なテストパターンから初めてどういう処理をやると
遅くなるのかと言う検証をされた方がよろしいかと。

この辺は、自分で実験すれば結果は直ぐ出るものですし、
そこまでやってその結果を持って質問された方がいいと思います。

今の質問内容では漠然としすぎていて答えようが有りません。
せめてループ内で何をやっているのかがわかる程度の情報は
公開してもらわないと回答する側は当て推量で答えるしかありません。


返信引用
kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

有難うございます。
どう説明したらいいか、いい言葉が見つかりませんが、
現在defineで定義した値(#define a 0.005)を(#define a 0.5)と値を大きくしたと
きに上述の症状が見られます。
(#define a 0.005)の場合ですと、同速度で起動しています。
なお、for文の中にはaが含まれています。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

そのaがどのような使われ方をしているかに解くカギがあると見た。
というわけで、具体的にどう使われているのか示してください。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

for文って

for(;;){
a=a+b ←ここ
}
こんな感じのこと記述するよね
>ここ
の部分では何をしているのかな?
只の計算、ファイルIO
さて何でしょう


返信引用
kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

すいません。皆様有難うございます。
ちょっと長くて表現しにくいのですが、
要約しますと

1.パターンを600個用意。
2.
for(;;下の処理を600回違ったパターンで繰り返す){
for(;;cを更新してある値以下までこの処理を繰り返す){
for(;;){
c=d-a(さきほどのパラメータ)*b
}
}
}


返信引用
kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

1.パターンを600個用意。
2.
for(;;下の処理を600回違ったパターンで繰り返す){
for(;;cを更新してある値以下までこの処理を繰り返す){
for(;;){
c=d-a(さきほどのパラメータ)*b
}
}
}
3.bもパラメータです。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ものすごく長いと言うなら話は別ですが、
掲載可能な量であれば、省略しない方がいいです。
どう省略していいかわからないのであれば、なおさら。

あと、おもうんですが、
forループを三つもネストしているのだから、
実際の計算量は600回ではないのではないですか?
内部のループ回数が親ループ内の計算結果に依存していれば、
計算結果次第ではループ回数はいくらでも膨らみます。


返信引用
kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

すいません。省略が難しいため、どうにかご了承ください。
WINDOWSから仮想メモリの最小値が低すぎると警告が出ています。
これも原因の1つなのかと考えるのですが?


返信引用
n
 n
(@n)
ゲスト
結合: 21年前
投稿: 90
 

newやmallocで確保したメモリはdeleteやfreeで適宜解放しましょう、という話では。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> newやmallocで確保したメモリはdeleteやfreeで適宜解放しましょう、という話では。

で、逼迫したメモリをなんとかしようとdisk-swapが発生しはじめた、とか。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

あらら、そうなるともう想像でしかアドバイスできないので
そのつもりでお願いします。
提示された内容からどうにかしろと言われても
回答者は超能力者ではないので。

私も後はメモリの解放漏れでメモリが逼迫ぐらいしか
考えつきませんねぇ。

解放すべきものを解放していなくてそういう事態になっているのか、
それとも確保するべくして確保しているのだけれど、メモリが絶対的に足りないのか。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

なんかここの部分が引っかかっているんですけど

>for(;;cを更新してある値以下までこの処理を繰り返す){

誤差関係の話でしょうか?


返信引用
kobayashi
 kobayashi
(@kobayashi)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

皆様有難うございます。
メモリが絶対的にたりないのかもしれません。
プログラムが長いです。
>誤差関係の話でしょうか?
その部分は誤差関係の話しです。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました