C言語雑談(三)ストレージカテゴリ
5055 ワード
本稿では,メモリにおけるデータの格納,変数の格納,関数の格納,生存期間を含むC言語における格納カテゴリについて論じる.下図はコンピュータの記憶空間で、レジスタとメモリがあります.
一、記憶領域
1.レジスタ:直ちに演算に参加するデータを格納します.
2.システムエリア:システムソフトウェアを保存する.
3.ユーザプログラムコード領域:ユーザプログラムのプログラムコードを格納する.
4.ライブラリプログラムコード領域:ライブラリ関数のコードを格納します.
5.データ領域.スタック領域、スタック領域、および静的記憶領域に分けられる.
(1)スタック領域:動的変数、すなわちmallocによって申請された動的変数を格納する.
(2)スタック領域:関数や複合文のローカル変数などを含む自動格納タイプの変数を格納する.
(3)静的記憶領域:明示的に宣言された静的タイプの変数を格納する.
二、変数の記憶カテゴリ
1.静的変数
静的変数:ここでの静的は、一般的なプログラム設計言語概念における静的変数、すなわち、プログラムで明示的に宣言される変数を指す.静的変数には名前があり、コンパイル時にコンパイラは静的変数にメモリ領域を割り当てています.
静的変数の格納タイプは、静的(staticとexternを含む)と自動(autoを含む)の2つに分類されます.
auto:自動ストレージカテゴリ、デフォルトのストレージカテゴリ
スタック領域に格納され、その関数と複合文を宣言する役割ドメインです.autoはローカル生存期間を有し,自動変数を宣言した個体が実行を終了すると,自動変数は生存周期を終了し,もう存在しない.
static:静的ストレージカテゴリ
静的ストレージ領域に格納されます.静的変数は、静的ローカル変数と静的グローバル変数に分けられます.
静的ローカル変数:ローカル生存期間があり、生存サイクルはプログラム全体であり、プログラムが終了した後、生存期間が終了し、削除されます.ただし、役割ドメインは宣言された個体にのみ存在します.複合文または関数を離れると、静的変数は依然として存在しますが、アクセスできません.静的変数を宣言する個体に再び入ると、使用を継続し、残りの値を使用する浅い値を保持できます.静的ローカル変数は、開始時に一度だけ初期化できます.
≪グローバルローカル変数|Global Local Variable|emdw≫:生存サイクルは、宣言されたプログラム・ファイル全体であり、いつでもアクセスできます.
extern外部ストレージカテゴリ
グローバル変数として使用できるストレージのタイプを指定します.静的ストレージ領域に格納されます.最上位宣言では、externはデフォルトのストレージカテゴリであり、externを追加していないグローバル変数はすべて外部変数とみなされます.他のファイルの外部変数を使用する場合はextern説明子を使用します.これにより、接続時に同じストレージ領域を割り当て、同じストレージ領域を占有します.両方のファイルの同じ名前のグローバル変数がexternを使用していない場合、接続時にエラーが発生します.グローバルな外部変数として宣言され、ストレージスペースが割り当てられ、競合が発生します.
ファイル1:
ファイル2
注意:registerレジスタの格納タイプは、コンピュータCPUのレジスタに変数を割り当てることを明示的に宣言し、頻繁にアクセスする変数に対して時間を節約し、プログラムの実行効率を向上させることができます.ただし,レジスタ数は限られており,レジスタ側が涼しすぎるとautoタイプとみなされる.
2.動的変数
動的変数:mallocなどの申請空間関数を使用して動的申請を行う空間で、スタック領域に格納されます.動的変数は明示的に宣言されず、コンパイル時に空間を割り当てない(割り当てられない).プログラムの実行時に、動的変数はポインタによって識別されます.使用が完了したら、freeなどの解放空間関数を使用して解放します.動的関数は動的生存期間を有し,生存周期は明示的に実現される.
三、関数のストレージカテゴリ
C言語の関数はstaticとexternの2つのストレージカテゴリとして定義することができる.
static:内部関数
変数のstaticストレージカテゴリとは異なります.内部関数の役割ドメイン呼び出し範囲は、このファイルに限られ、異なるソースファイル内の同名の静的関数は混同されません.
extern:外部関数
関数のデフォルトの格納カテゴリ.外部関数は1つのソースファイルで定義され、他のソースファイルで使用できます.1つのソース・ファイルで他のソース・ファイルで定義された外部関数を呼び出す場合は、このソース・ファイルで関数プロトタイプで説明し、extern接頭辞を付ける必要があります.
すべての関数は静的生存期間を有し,すなわち割り当てられた空間はプログラム実行前に開始し,プログラム実行終了まで保持される.
ファイル1:
ファイル2:
extern int f(foat);//外部関数の使用
本文はwhina(江城老温)のオリジナルから発表して、転載して出典を明記してください、江城老温as a thinker.
一、記憶領域
1.レジスタ:直ちに演算に参加するデータを格納します.
2.システムエリア:システムソフトウェアを保存する.
3.ユーザプログラムコード領域:ユーザプログラムのプログラムコードを格納する.
4.ライブラリプログラムコード領域:ライブラリ関数のコードを格納します.
5.データ領域.スタック領域、スタック領域、および静的記憶領域に分けられる.
(1)スタック領域:動的変数、すなわちmallocによって申請された動的変数を格納する.
(2)スタック領域:関数や複合文のローカル変数などを含む自動格納タイプの変数を格納する.
(3)静的記憶領域:明示的に宣言された静的タイプの変数を格納する.
二、変数の記憶カテゴリ
1.静的変数
静的変数:ここでの静的は、一般的なプログラム設計言語概念における静的変数、すなわち、プログラムで明示的に宣言される変数を指す.静的変数には名前があり、コンパイル時にコンパイラは静的変数にメモリ領域を割り当てています.
静的変数の格納タイプは、静的(staticとexternを含む)と自動(autoを含む)の2つに分類されます.
auto:自動ストレージカテゴリ、デフォルトのストレージカテゴリ
スタック領域に格納され、その関数と複合文を宣言する役割ドメインです.autoはローカル生存期間を有し,自動変数を宣言した個体が実行を終了すると,自動変数は生存周期を終了し,もう存在しない.
auto int i;
int j;// auto
static:静的ストレージカテゴリ
静的ストレージ領域に格納されます.静的変数は、静的ローカル変数と静的グローバル変数に分けられます.
静的ローカル変数:ローカル生存期間があり、生存サイクルはプログラム全体であり、プログラムが終了した後、生存期間が終了し、削除されます.ただし、役割ドメインは宣言された個体にのみ存在します.複合文または関数を離れると、静的変数は依然として存在しますが、アクセスできません.静的変数を宣言する個体に再び入ると、使用を継続し、残りの値を使用する浅い値を保持できます.静的ローカル変数は、開始時に一度だけ初期化できます.
≪グローバルローカル変数|Global Local Variable|emdw≫:生存サイクルは、宣言されたプログラム・ファイル全体であり、いつでもアクセスできます.
{
static int a;
...
}// , auto
// , ,
extern外部ストレージカテゴリ
グローバル変数として使用できるストレージのタイプを指定します.静的ストレージ領域に格納されます.最上位宣言では、externはデフォルトのストレージカテゴリであり、externを追加していないグローバル変数はすべて外部変数とみなされます.他のファイルの外部変数を使用する場合はextern説明子を使用します.これにより、接続時に同じストレージ領域を割り当て、同じストレージ領域を占有します.両方のファイルの同じ名前のグローバル変数がexternを使用していない場合、接続時にエラーが発生します.グローバルな外部変数として宣言され、ストレージスペースが割り当てられ、競合が発生します.
ファイル1:
int a;//extern
ファイル2
extern int a;// 1 ,
注意:registerレジスタの格納タイプは、コンピュータCPUのレジスタに変数を割り当てることを明示的に宣言し、頻繁にアクセスする変数に対して時間を節約し、プログラムの実行効率を向上させることができます.ただし,レジスタ数は限られており,レジスタ側が涼しすぎるとautoタイプとみなされる.
2.動的変数
動的変数:mallocなどの申請空間関数を使用して動的申請を行う空間で、スタック領域に格納されます.動的変数は明示的に宣言されず、コンパイル時に空間を割り当てない(割り当てられない).プログラムの実行時に、動的変数はポインタによって識別されます.使用が完了したら、freeなどの解放空間関数を使用して解放します.動的関数は動的生存期間を有し,生存周期は明示的に実現される.
float *p;
p=(float*)malloc(sizeof(float));//
...
free(p);//
三、関数のストレージカテゴリ
C言語の関数はstaticとexternの2つのストレージカテゴリとして定義することができる.
static:内部関数
変数のstaticストレージカテゴリとは異なります.内部関数の役割ドメイン呼び出し範囲は、このファイルに限られ、異なるソースファイル内の同名の静的関数は混同されません.
extern:外部関数
関数のデフォルトの格納カテゴリ.外部関数は1つのソースファイルで定義され、他のソースファイルで使用できます.1つのソース・ファイルで他のソース・ファイルで定義された外部関数を呼び出す場合は、このソース・ファイルで関数プロトタイプで説明し、extern接頭辞を付ける必要があります.
すべての関数は静的生存期間を有し,すなわち割り当てられた空間はプログラム実行前に開始し,プログラム実行終了まで保持される.
ファイル1:
int f(float x)//
{
...
}
ファイル2:
extern int f(foat);//外部関数の使用
本文はwhina(江城老温)のオリジナルから発表して、転載して出典を明記してください、江城老温as a thinker.