現在ゲームを作っているのですが、実際にプレイしてみると、ゲームを進めていくうちにだんだんと処理が重くなってきているような気がします。
主に各ステージごとに関数を作っていて
void stage01(){
int static format;
int static data;
}
↑(実際はかなりたくさんあります)
というようにstaticで変数を宣言していて、このような関数がいくつもあります。処理が重くなったのは、各ステージで宣言したstatic変数が確保しているメモリが解放されないからと考えていますがそのようなことはあるのでしょうか?原因もメモリとはいえませんし、もしそれが原因だとしても解決方法が分からずにかなり苦戦しています。どなたか手を貸してください。お願いします。
static変数について
Re: static変数について
かなりたくさんBILT さんが書きました: void stage01(){
int static format;
int static data;
}
↑(実際はかなりたくさんあります)
というようにstaticで変数を宣言していて、このような関数がいくつもあります。
いくつもある
という定性的な部分を、定量的に書くとどうなりますか?
定性的なままですと、なかなかお答えしづらいところがありまして…。
ただ、定量的に書かれたからといって、私が回答できるとは限らない、ということもありまして…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: static変数について
言いたい事が今ひとつ分かりません。 この疑問文の趣旨は、static 変数が原因で処理が重くなる事ってあるの? って聞いているのですか?BILT さんが書きました:というようにstaticで変数を宣言していて、このような関数がいくつもあります。処理が重くなったのは、各ステージで宣言したstatic変数が確保しているメモリが解放されないからと考えていますがそのようなことはあるのでしょうか?
それとも、static 変数が確保しているメモリが解放されないなんて事あるの? って聞いているのですか?
前者についてはまぁ、極めてレアケースではありますが、初期化のタイミングにおいて、若干の遅延が発生する事が、あると言えばあります。
ただ、初期化のタイミングにおいて。 ですから、処理を追う毎に重くなる物ではありません。
むしろ、多くの場合、関数への突入・離脱毎にメモリの確保・解放が行われない分早くなるのでは無いかと思います。 体感は出来ないと思いますが。
後者については、今回のコード例に限って言えば、static 変数の寿命は、プログラムの開始から終了までですので、そのプログラムが終了されない限りメモリが解放される事はありません。
今回の処理が重くなる件に関しては、恐らく関係無いと思いますよ。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: static変数について
staticは無関係でしょう。
メモリの使用量が増えていないかタスクマネージャで確認してみてください。
ロードした画像を開放していないのが一番考えられます。
メモリの使用量が増えていないかタスクマネージャで確認してみてください。
ロードした画像を開放していないのが一番考えられます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: static変数について
>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(ソフト屋)さん
なるほど。ロードした画像ですか。それは思いつきませんでした。試してみます。
すみません。
ちゃんと書くとこんな感じですかね?
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(ソフト屋)さん
なるほど。ロードした画像ですか。それは思いつきませんでした。試してみます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: static変数について
stage01とstage02ってプログラム的には何が違うのでしょうか?
変数を見る限り同じような処理を別の関数で行っているように感じますが。
変数を見る限り同じような処理を別の関数で行っているように感じますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。