プログラミングをしたことがあるならばたぶん、ひょっとするとしたことがなくても、 「メモリ効率」という言葉を耳にしたことがあるのではないでしょうか。 そんな言葉もうとっくに知っているよと思ったとしても、ちょっと待ってください。 あなたはプログラムを組む際に、きちんとメモリ効率を意識していますか? 「バッチシ!」であればもうこれ以上読み進める必要はありません。 「そう言われてみれば、そんなに意識してなかったかもしれない・・」というのであれば、 是非読み進めてください。
メモリの役割とは情報を記憶しておくことですが、どのような情報を記憶しているのでしょうか。 大きく分けてメモリは、「処理命令」と「データ」の2つを記憶します。 処理命令とは、プログラムを実行する際にコンピュータに与える命令のことで、 プログラムが実行されると、セクションごとに区切られたプログラムが、必要に応じてメモリにロードされ、 そこを参照してプログラムの実行が進められます。 データとは、処理命令があって、何を処理させたいのかとか、処理をした結果が何であってのかというものです。 そしてメモリは、処理領域とデータ領域が明確に区別された形で使用されます。
そこでデータ領域にデータをなんでもかんでも詰め込んでしまうと、 処理領域が圧迫されてしまうかというと、そうでもないんです。 一般的にデータは主記憶装置という、いわるゆ「メインメモリ」と呼ばれているストレージに格納されていますが、 それが増えてあふれた分は、補助記憶装置という、いわゆる「ハードディスク」に保存されるようになっています。 このおかげで、実行速度がどうでもいいというのであれば、メモリ効率についてはほとんど考えなくても構わないのですが、 処理速度を考えるとそうも言っていられなくなります。 ハードディスクへのアクセス速度は、メインメモリへのアクセスアクセス速度よりもはるかに劣るため、 プログラムを軽快に動作させたいのであれば、なるべくならハードディスクにはアクセスしないで処理を進めるべき です。
そこで本項では、メモリ効率について記述します。
できるプログラマというのは、プログラムを組む際、メモリ効率についての意識を自然と行っています。 つまりできるプログラマであるためには、メモリ効率を意識することが前提であるといえます。 ではその「メモリ効率についての意識」とは、どういったものでしょうか。 順番に幾つか説明していきます。
データ型とメモリには、密接な関係があります。 C言語であればchar型は1バイト、short型は2バイト、int型は4バイトというように、サイズごとに型が定義されています。 ということは、サイズの小さいデータ型を使用すれば、それだけメモリ効率はよくなるということになります。 しかし1バイトで表せる数値は、256しかないので、それで足りなければ2バイト、 それでもダメなら4バイトの型を使用する必要があり、あるプログラムにある程度の自由度を持たせようとすると、 どうしてもサイズの大きなデータ型を使用しがちになってしまいます。 とはいっても、以下のような小さなデータ型を使える場面では、きちんと小さなデータ型を使っておくべきです。
変数を定義するときには、必ずこれらを一度考えた上でどのサイズのデータ型にするのか決めるように習慣づけましょう。
バッファは、固定長の領域しか必要ないのであれば、そのぎりぎりのサイズを確保しておけばいいのですが、
バッファの必要サイズがいくらになるのかは、動かしてみないとわからないようなプログラムを書くときには、
ある程度余裕をもって定義しておく必要があります。
しかしあまりに余裕を持たせたサイズだと、使いもしないのに無駄にメモリを使ってしまいます。
つまり余裕がありすぎてもなさすぎてもダメだなわけです。
最初はあまり大きいサイズで宣言しないで、必要になったらその分だけサイズを変えることも可能ですが、
それには、1,まったく別の場所に新しいサイズのバッファ領域を確保し、
2,古いバッファ領域から新しいバッファ領域にすべての情報をコピーし、
3,古いバッファ領域を開放する、
という3つの手順を踏む必要があります。
しかしこんなことをたくさん繰り返していたのでは、プログラムの実行速度が落ちてしまいます。
再定義はするけれど、そのたびに気持ち多めのサイズにしておき、
あまり頻繁には再定義はしないというのが一番妥当だと思います。
また、どうしても使用するメモリ使用量を少なくすることができないようなプログラムならば、
積極的にハードディスクなどの外部メモリを使用するという方法もあります。
プログラムの中にも、よくアクセスするデータと、あまりアクセスしないけれど無駄に大きいデータがあると思います。
そのうちのあまりアクセスしないほうのデータは、はじめから外部メモリを使用するようにプログラムを組んでおきます。
すると、サイズもあまり気にしなくてよく、しかも実行速度も極力落とさずにすみます。
本項のまとめ。