ページ 1 / 1
static変数について
Posted: 2011年9月19日(月) 02:30
by BILT
現在ゲームを作っているのですが、実際にプレイしてみると、ゲームを進めていくうちにだんだんと処理が重くなってきているような気がします。
主に各ステージごとに関数を作っていて
void stage01(){
int static format;
int static data;
}
↑(実際はかなりたくさんあります)
というようにstaticで変数を宣言していて、このような関数がいくつもあります。処理が重くなったのは、各ステージで宣言したstatic変数が確保しているメモリが解放されないからと考えていますがそのようなことはあるのでしょうか?原因もメモリとはいえませんし、もしそれが原因だとしても解決方法が分からずにかなり苦戦しています。どなたか手を貸してください。お願いします。
Re: static変数について
Posted: 2011年9月19日(月) 04:40
by box
BILT さんが書きました:
void stage01(){
int static format;
int static data;
}
↑(実際はかなりたくさんあります)
というようにstaticで変数を宣言していて、このような関数がいくつもあります。
かなりたくさん
いくつもある
という定性的な部分を、定量的に書くとどうなりますか?
定性的なままですと、なかなかお答えしづらいところがありまして…。
ただ、定量的に書かれたからといって、私が回答できるとは限らない、ということもありまして…。
Re: static変数について
Posted: 2011年9月19日(月) 08:15
by へろりくしょん
BILT さんが書きました:というようにstaticで変数を宣言していて、このような関数がいくつもあります。処理が重くなったのは、各ステージで宣言したstatic変数が確保しているメモリが解放されないからと考えていますがそのようなことはあるのでしょうか?
言いたい事が今ひとつ分かりません。 この疑問文の趣旨は、static 変数が原因で処理が重くなる事ってあるの? って聞いているのですか?
それとも、static 変数が確保しているメモリが解放されないなんて事あるの? って聞いているのですか?
前者についてはまぁ、極めてレアケースではありますが、初期化のタイミングにおいて、若干の遅延が発生する事が、あると言えばあります。
ただ、初期化のタイミングにおいて。 ですから、処理を追う毎に重くなる物ではありません。
むしろ、多くの場合、関数への突入・離脱毎にメモリの確保・解放が行われない分早くなるのでは無いかと思います。 体感は出来ないと思いますが。
後者については、今回のコード例に限って言えば、static 変数の寿命は、プログラムの開始から終了までですので、そのプログラムが終了されない限りメモリが解放される事はありません。
今回の処理が重くなる件に関しては、恐らく関係無いと思いますよ。
Re: static変数について
Posted: 2011年9月19日(月) 10:28
by softya(ソフト屋)
staticは無関係でしょう。
メモリの使用量が増えていないかタスクマネージャで確認してみてください。
ロードした画像を開放していないのが一番考えられます。
Re: static変数について
Posted: 2011年9月19日(月) 14:48
by BILT
>boxさん
すみません。
ちゃんと書くとこんな感じですかね?
void stage01(){
int static format;
int static data;
int static effect[5000];
int static effectX[5000];
int static effectY[5000];
int static effectAngle[5000];
int static effectBlend[5000];
int static effectTime[5000];
int static effectBody[5000];
int static effectRota[5000];
}
void stage02(){
int static format;
int static data;
int static effect[5000];
int static effectX[5000];
int static effectY[5000];
int static effectAngle[5000];
int static effectBlend[5000];
int static effectTime[5000];
int static effectBody[5000];
int static effectRota[5000];
}
・・(以後同じようにstage03、stage04と続きます)
>へろりーなさん
前者の方です。すみません。
そうなんですか。staticの方が早いんですね。初めて知りました。自分は逆だと思っていたので。
>softya(ソフト屋)さん
なるほど。ロードした画像ですか。それは思いつきませんでした。試してみます。
Re: static変数について
Posted: 2011年9月19日(月) 14:57
by softya(ソフト屋)
stage01とstage02ってプログラム的には何が違うのでしょうか?
変数を見る限り同じような処理を別の関数で行っているように感じますが。