ページ 11

メモリ使用量が大きくなる原因

Posted: 2011年1月23日(日) 18:26
by type
はじめまして、私は簡単?なGUI操作を行うプログラムをDxライブラリで製作しています。 今回そのプログラムのテスト時に非常にメモリを食う箇所がありました。(監視は大雑把ですがタスクマネージャーです) イカにプログラムの構造を書いておきます。

 マウスの座標を調べ、画面上のボタンがクリックされるのを待ちます。クリックされると処理番号がprocess変数に代入されて別々の処理が実行されていき最後にデフォルトの処理番号に戻されます。

process =1: /*処理番号の初期化(デフォルト)*/
while( !ProcessMessage( ) ){ /*メインループです*/
Mouse_Click( mouse_x, mouse_y ); /*この関数でprocess変数を変更していきます。*/
switch( process ){
case 1:
/*デフォルト処理*/
case 2:
/*番号2番の処理*/
(略)
}
}

このような構造でGUI操作を行うのですが、デフォルトではなんらメモリに変化はありません。。。しかしボタンを押して処理を呼び出すと毎回メモリが増加します。各処理の最後はメモリの後始末(mallocで確保しております)を行っているにもかかわらずデフォルトに戻るときに使用量が減ってくれません(泣)・・・・ボタンを押してデフォルトに戻るの繰り返しをする度に増加する一方なのです。

質問:どうしてメモリが増加してて、解放しているのに減少しないのか? どなたかアドバイスできる方よろしくお願いします。!!

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月23日(日) 18:54
by a5ua
これだけのプログラムでは、原因は特定できません。
現象を再現できるプログラム全体を記載したほうが、回答を得られやすいと思います。

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月23日(日) 22:27
by dic

コード:

process =1: /*処理番号の初期化(デフォルト)*/
while( !ProcessMessage( ) ){ /*メインループです*/
Mouse_Click( mouse_x, mouse_y ); /*この関数でprocess変数を変更していきます。*/
switch( process ){
  case 1:
  /*デフォルト処理*/
  case 2:
  /*番号2番の処理*/
  (略)
  }
}
ここだけを見ると process = 1 の部分がアプリケーションが起動している間中 case 1: をとおります

けど
違うところでしょうね

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月23日(日) 22:36
by softya(ソフト屋)
DXライブラリが原因なら、何らかの画像等をロードしたままて放置しているとしか思えません。
画像とかロードしていませんか?

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月24日(月) 20:20
by type
みなさんアドバイスありがとうございます>< しかし以前問題は解決せずです

>>softya様  画像は背景とボタンを数個はじめにLoadGraph関数でメモリに読込んでおります。何度もロードしてないはずなんですが・・・

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月24日(月) 20:25
by softya(ソフト屋)
type さんが書きました: >>softya様  画像は背景とボタンを数個はじめにLoadGraph関数でメモリに読込んでおります。何度もロードしてないはずなんですが・・・
それは実際にデバッガ等でちゃんと確認された事実でしょうか?
思い込みと実際に確認したのでは話がだいぶ違いますので、絶対確認して下さい。

それがもし問題なければ、mallocやnewのあるところを疑うしか有りませんね。

Re: メモリ使用量が大きくなる原因

Posted: 2011年1月24日(月) 20:54
by Ciel
実際にどれぐらいメモリ食うんですか?

どちらにしろこれだけのコードでは原因を見つけるのは難しいです。