映画、CG、プログラム等

2014年3月2日日曜日

プログラミング疑問「変数のループ内宣言について、パフォーマンスに影響はあるのか?」

この前初めてスマフォでゲームを作ってみて
いわゆる、ループ内で変数宣言をしていいのかということについて
ちょっと気になりました。

新人のころは、頭で必ず必要変数を宣言!って叩き込まれたもんですが
実際自分でシステムまわすようになると、そこまでこだわる必要あるのか?
むしろブロック単位でしか使用しないなら、その中に書いたほうがわかりやすいし
問題もすくないんじゃないかと考えるようになり、
ループ処理は、サブ化してその中で変数宣言をしていました。

ループの数分、変数が宣言されるので
それだけ余計な処理をしている→コストがかかる。
のかなーというイメージはありましたが、

目に見えて遅くなるとかいうこともなかったし
ソースの見易さ、変数を誤操作しても影響はそのサブ内など、
メンテ性を優先してループ内宣言を使用していました。

また、java等の新言語でブロック変数が出てきてからは
特に、なるだけ小さい単位で、宣言→破棄をこころがけるようになってました。

ただ、それは業務用のソフトでのことで
今回ゲームというものを作るにあたって
しかも、スマフォというPCと比べたらスペックの小さい端末で
その辺、無視しといていいんだろうか?
ということが気になり、ちょっといろいろ調べてみると

さすがグーグル博士。
一瞬で回答がでました。

結論は、やってよいということです。

IBMの技術文書のページにちゃんと書いてありました。

これを読むと
むしろ、やれということらしいです。

パーフォーマンスについても、かわんねーよとIBMが太鼓判おしてくれてます。
発火後忘失
というブログもあわせと読むといいですが

機械側での処理は、宣言時には何も行わず変数に値が入る際に
初めて処理命令が走るということですので、
ループ外で一回宣言も、ループ内で複数回宣言も
どっちでやっても、それ自体にコストはかかってないとのことなのです。

なるほどー。
これで、あらためて
何もうしろめたい思いをせずに、
がんがんループ内で宣言しちゃっていいのですね。


コメントを投稿