UNIXで使われるメモリーは基本的に仮想メモリーです。ですから古い意味で の(オーバーレイ等)メモリー管理はユーザが意識する必要はありません。特に 意識する必要がある場合としては、他のプロセスとメモリーを共有する場合や、 VMEなどハード的に固定されたメモリー空間をアクセスする場合です。これら については別に説明します。
システムコールには上述以外のメモリー管理に関するものはありません。C のランタイムライブラリーに動的なメモリー割付に関するものがあります。
char *ptr; ptr = malloc( 65536 ); /* 65536バイト割付 */ ... free( ptr ); /* メモリー解放 */
Cプログラムの中でメモリーがどう扱われているかおさらいしておきましょ う。まずグローバルとローカルの差があります。グローバルは関数の外で宣言 される変数であり、プロセスの生成と同時に確保されプロセス終了まで持続し ます。一方ローカル変数は関数の中で定義されるもので関数呼び出しの時に確 保され、関数から抜け出すときに破棄されます。関数内で定義したいけれども グローバルのように持続する変数を宣言するには変数宣言にstaticをつけてお きます。ローカル、グローバル以外にCで扱えるデータ領域があります。通常 ヒープと呼ばれます。ここは変数宣言によって割り当てられることはありませ ん。上述のmalloc、freeで管理で管理されます。そのためプログラムの任意の ところで領域が確保され、任意のところで開放されます。そのかわりポインター でしか取り扱えませんし、ユーザが管理する責任をおいます。