ソフトウェア開発において情報はどこまで見せるか 3

Aという関数がもっているデータを使用して、Bという関数に仕事をまかせる時には、引数と呼ばれるデータの入り口に、その値をメッセージとして渡すことが出来ます。Bという関数は自身のローカル変数に受け取った

値を入れて仕事をはじめることになります。これは関数同士の間でかわすメッセージ量が少ない場合は問題ありません。問題がないどころか、安全に関数同士でメッセージを伝えることが出来ます。

 

しかしメッセージの量が多くなったり、種類が増えたりすると、あまり賢く便利なやり方だとは言えなくなってきます。関数同士で複数なデータの結合などを生むことにもなり、プログラムが煩雑になってしまいます。またデータの長さが解らない場合には、決まった大きさを確保するスタック領域に場所を確保することは困難です。そこで広域なデータの扱いが出来る必要があります。

 

関数の内部で使用されるローカル変数に対して、関数の外で宣言されるのが外部変数です。関数間で自由にアクセス出来るデータになるだけでなく、データの長さを自由に、動的に扱うことが可能になります。外部変数はメモリの動的記憶領域に置かれることになりますが、この領域はヒープと呼ばれます。ヒープ上に置かれたデータは、ローカル変数のように関数が終了しても自動的に削除されません。

 

ローカル変数と外部変数では、「通用範囲」「存在時間」に違いがあります。ローカル変数は一つの関数内で通用し、その関数が終わるとデータは消えてしまいます。一方外部変数は複数の関数からなるプログラム全体で通用し、一つの関数の終了に影響されず存在します。

 

ヒープ領域はリストデータのような動的で大きなデータにも使用されます。その時、メモリを管理するのはプログラマです。malloc()関数により使用するメモリ領域を指定して、使用後にfree()関数で領域を解放する、という手続きをおこないます。ヒープ領域は一定量の使用出来る範囲があるため、解放せずに要求を続けると、メモリリークを起こしてしまいます。プログラマは明示的に領域を確保し、解放する必要があります。

 

情報は誰のものか。

 

外部変数は、プログラム全体のものであり、またプログラマのものであると言えます。そしてデータはヒープ領域におかれています。