PR

 現在のコンピュータは,「フォン・ノイマン*1型のコンピュータ」といわれています。フォン・ノイマン型コンピュータの特徴は,ごく当たり前のことに思えますが,プログラムを内部のメモリーにデータとして記憶させることです。これは,プログラムもデータの一部に過ぎないことを意味しています。コンピュータのハードウエア側からみれば,プログラムとデータに本質的な違いはなく,どちらも2進数の連続した値にほかならないのです。

 フォン・ノイマンがこのプログラム内蔵方式を提唱したのは,太平洋戦争が終結した年,1945年のことです。それから60年近く経つのに,コンピュータの基本的な仕組みそのものはたいして変わっていません。

 それ以前には,フォン・ノイマン型ではないコンピュータがありました。世界最初のコンピュータといわれるENIAC*2では,プログラムは配線で実現されていました。テキスト・ファイルとして書き込んだソースコードではなく,本当にコード(配線)を人手で,端子から端子へ何本もつなぐことで実現されていました。

 さらにそれ以前はというと,パスカル*3の歯車計算機,「コンピュータの父」と呼ばれるバッベジ*4の階差機関や解析機関などのような,機械仕掛けの仕組みになってしまいます。

 少し脱線しすぎました。現在のコンピュータでは,メモリーのどこかのアドレスにプログラムの変数が記憶されます。同様に,プログラム本体もメモリーにロードされてから,実行されます。プログラムの実体をなす関数も,メモリーのどこかのアドレスに記録されているわけです。

 皆さんはすでに,ポインタを使ってアドレスで変数の値にアクセスすることをご存じでしょう。これと同様に,関数へもポインタを介してアクセスできます。変数を読み込むことと,関数を読み込むことはコンピュータのハードウエアからみれば,大きな違いはありません。

 今回のテーマは,この「関数にポインタを使ってアドレスでアクセスする」ことです。メモリーの中を,いかに具体的にイメージしてもらうかに,こだわってきた本連載ですから,最終回もメモリーにピタッと張りつくような解説をしたいと思います。前置きが長くなりすぎましたね。それでは始めましょう。