C言語開発者経験者なら分かるだろう。
malloc()という関数の恐ろしさを、
malloc()で動的メモリを確保したら、
絶対、free()で開放しなければならない。
後free()する順番もまちがってはならない。
2、3個メモリ確保する小さなプログラムなら問題ないだろう、
しかし、
膨大なプログラムになると
何個もmalloc()することとなる。
あまりにもmalloc()したため
たまにfree()し忘れるやつがいる。(複数人で開発したとき)
こいつは重罪人、即打ち首w
でかい領域を確保するなら、すぐプログラムが止まるので気づくが
恐ろしいのは、ちょっとしか確保しなかったメモリだ。
ゲームではソフトリセットしてタイトルにもどるとかがあるが、
free()し忘れると、気づかないうちに、どんどんメモリを消費していく。
50回くらいリセットしたところで、メモリが足りなくてフリーズとかもあった。
しかもfree()し忘れを探すのが大変。
他人のプログラムとなるともっと大変。
尻拭いは俺担当だった。
このせいで神経すり減らした(病気発病したのこのせい?w)
信じられますか?ドリキャスやプレステのゲーム開発でも
平気でmalloc()使うんですよ?
上級者ならmalloc()なんか使わないで、動的メモリ確保は自分で実装しますよ?
さて、
その後、ゲーム開発ではC++が使われるようになったため、
こんな自体は起きなくなった。
だが、こんどは確保と開放のタイミングの問題がはっせいするようになった。
また小さな、メモリ、確保開放をくりかえすと、メモリに穴があく。
どういうことかといういと、ハードディスクにファイルをたくさんいれて、
削除していくと、ファイルとファイルのあいだに穴があいていき、
断片化が起きるとおなじことが起きる。
これは知っている人なら分かるが、定期的にデフラグすると回復するが、
少々時間がかかる。
メモリに穴が開くとは、これと同じ現象、
ハードディスクのデフラグと似ているものに
メモリのガベージコレクションというのがある。
この処理は重いのでゲームでは画面が止まったりするから致命的。
なので、ゲームプログラマーはガベコレに神経使うようになった。
そして、ついにここで、D言語が登場!!
動的メモリ確保開放ガベコレは自動的、そして速い!!(たぶんw)
いいことだらけ(たぶんw)
D言語はまだ初心者なので詳しくないので
興味ある人は検索してください。
ゲームプログラムとD言語に詳しい方!コメント募集!!