next up previous contents
Next: 時間管理 Up: システムコールを使う Previous: プロセス管理

メモリ管理

UNIXで使われるメモリーは基本的に仮想メモリーです。ですから古い意味で の(オーバーレイ等)メモリー管理はユーザが意識する必要はありません。特に 意識する必要がある場合としては、他のプロセスとメモリーを共有する場合や、 VMEなどハード的に固定されたメモリー空間をアクセスする場合です。これら については別に説明します。

システムコールには上述以外のメモリー管理に関するものはありません。C のランタイムライブラリーに動的なメモリー割付に関するものがあります。

        char *ptr;



        ptr = malloc( 65536 );  /* 65536バイト割付 */

        ...

        free( ptr );            /* メモリー解放 */

Cプログラムの中でメモリーがどう扱われているかおさらいしておきましょ う。まずグローバルとローカルの差があります。グローバルは関数の外で宣言 される変数であり、プロセスの生成と同時に確保されプロセス終了まで持続し ます。一方ローカル変数は関数の中で定義されるもので関数呼び出しの時に確 保され、関数から抜け出すときに破棄されます。関数内で定義したいけれども グローバルのように持続する変数を宣言するには変数宣言にstaticをつけてお きます。ローカル、グローバル以外にCで扱えるデータ領域があります。通常 ヒープと呼ばれます。ここは変数宣言によって割り当てられることはありませ ん。上述のmalloc、freeで管理で管理されます。そのためプログラムの任意の ところで領域が確保され、任意のところで開放されます。そのかわりポインター でしか取り扱えませんし、ユーザが管理する責任をおいます。



next up previous contents
Next: 時間管理 Up: システムコールを使う Previous: プロセス管理



Kinya Hibino
Sun Jan 14 21:36:40 JST 1996