2010年04月26日(月)
金土月の2日半での成果(仕事のグチ)
また珍しく仕事の話。
とあるプログラムで使用可能なとあるメモリ領域が8MB程度ある。
これは現状で動作するのにほぼ最低限必要なサイズと言ってよい。
が、これに某機能を実装する事が必要になり、更にその機能を組み込んでいく度にメモリーが必要になって行き、最終的には1MBもその機能の為に割り当てる必要が出てきた。
元のプログラムはこの某機能を動作させた上で動かす必要があるので、当然の如く機能を組み込んでいくと、元のプログラムは某モードに切り替わった途端にメモリー不足で停止するようになった。
毎度の事ながら困ったもんだ。
仕方が無いのでこの8MBの使い方を改めて精査してみる事にした。
調べてくとどうも尋常でないような無駄なメモリーの使い方がされているという事が分かってきた。
8MB中、4MBがとあるクラスのオブジェクトで占められてるのだ。
またその4MB の中身が全て有効に使われているならばそれは仕方の無い事なのだが(とは言っても8MB 中の4MB を占める状況は正しい構成とは思えないが)、何とほとんどが確保だけして1/4もまともに使われてないままの状態という有様だった……。
これをかなり軽微と言えるリスクとコストを踏まえた上で最適化してみたところ、
何と1MB削った上に+3MBもメモリーの空きができてしまった!
開発末期にこんな余裕が逆にできるなんざ、ほとんど錬金術レベルだなこりゃ。
まあ改善できる無駄が元にあったからこそではあるんだが。
今までこういったシステム寄りの仕事はそんなに多くはやってきてないが(とはいってもそこそこやってるが)、こういうのは正にプログラマー冥利に尽きるというところじゃなかろうか。
恐らく今までのプログラミングのなかで最高レベルのハック(Hack:うまい事やる [1.他動-3])に挙げられるだろうな。
今回のプロジェクトは既に何が出てきても驚きはしないのだが、まあこういう事もあるもんだなと。
これで心置きなく某機能の実装に集中できますわ。