C言語 記憶域期間
間違っている場所あったら優しく教えてね
記憶域期間について勉強したのでメモしておく.
記憶域期間とは
記憶域期間とは一言で言うと変数の寿命.
変数は定義する場所によって参照できる範囲が異なる参照できる範囲のことを寿命と言う.
記憶域期間には2種類あります.自動記憶域期間と静的記憶域期間です.
自由記憶域期間
static
という記憶域クラス指定子をつけずに定義されたオブジェクト(変数)に与えられる.
宣言された場所からそのスコープがなくなるまでが寿命になります.
{ int a = 0; }
このスコープから抜けたら変数 a
は消えます. 次に呼ばれる際には新しいa
が生成されます
静的記憶域期間
static
記憶域クラス指定子がついているオブジェクト(変数)です.
プログラムの開始時にmain関数が実行される前にオブジェクト(変数)が生成される オブジェクト(変数)が削除されるのはプログラムが完全に終了したとき.
永遠の命が与えられます.
static int a = 0;
staticがついた変数の初期化処理はmain関数が実行される前に行われ一度行われた場合はまた呼ばれることはありません.
記憶域クラス指定子
記憶域クラス指定子によって記憶域期間とリンケージが決定されます.
記憶クラス指定子のデフォルトは,
- ファイルスコープのオブジェクトextern
- 関数はextern
- ブロックスコープのオブジェクトはauto
- auto
ブロックスコープ - register
- static
- extern