クラシックC言語面接問題11:プログラムのメモリ割り当て
980 ワード
C/C++でコンパイルされたプログラムによって消費されるメモリは、次の部分に分けられます.
1、スタック領域(stack):システムによって自動的に割り当てられ、解放され、関数のパラメータ値、局所変数の値などを格納する.
2、ヒープエリア(heap):一般的にプログラマーによって割り当てられ、解放され、プログラマーが解放されない場合、プログラム終了時にシステムによって回収される可能性がある.
3、グローバル領域/静的領域(static):グローバル変数と静的変数の記憶は一緒に置かれ、初期化されたグローバル変数と静的変数は1つの領域にある.初期化されていない全局所変数と初期化されていない静的変数は、隣接する別の領域にあり、プログラムが終了するとシステムによって解放される.
4、文字定数領域:定数文字列はここに置いてあり、プログラムが終わったらシステムから解放される.
5、プログラムコード領域:関数体のバイナリコードを保存する.
こんなにたくさん言ったのに概念がないの?次に例を示します.
------------------------------------------------The end---------------------------------------------------
1、スタック領域(stack):システムによって自動的に割り当てられ、解放され、関数のパラメータ値、局所変数の値などを格納する.
2、ヒープエリア(heap):一般的にプログラマーによって割り当てられ、解放され、プログラマーが解放されない場合、プログラム終了時にシステムによって回収される可能性がある.
3、グローバル領域/静的領域(static):グローバル変数と静的変数の記憶は一緒に置かれ、初期化されたグローバル変数と静的変数は1つの領域にある.初期化されていない全局所変数と初期化されていない静的変数は、隣接する別の領域にあり、プログラムが終了するとシステムによって解放される.
4、文字定数領域:定数文字列はここに置いてあり、プログラムが終わったらシステムから解放される.
5、プログラムコード領域:関数体のバイナリコードを保存する.
こんなにたくさん言ったのに概念がないの?次に例を示します.
int a = 0; //
char *p; //
void main()
{
int b; //
char s[] = "abcd"; //
char *p2; //
char *p3 = "123456"; //123456 ,p3
static int c = 0; // ( )
p1 = (char *)malloc(10); // 10
p2 = (char *)malloc(20); // 20
strcpy(p1, "123456");
}
------------------------------------------------The end---------------------------------------------------