クラシックC言語面接問題11:プログラムのメモリ割り当て


C/C++でコンパイルされたプログラムによって消費されるメモリは、次の部分に分けられます.
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---------------------------------------------------