堆棧

一個由C/C++編譯的程序佔用的內存分爲以下幾個部分
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數名,局部變量的名等。其操作方式類似於數據結構中的棧。
2、堆區(heap)— 由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表
3、全局區(靜態區)(static)—全局變量靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束後由系統釋放。
4、文字常量區—常量字符串就是放在這裏的,程序結束後由系統釋放 。
5、程序代碼區— 存放函數體二進制代碼

例子程序

這是一個前輩寫的,非常詳細
1
2
3
4
5
6
7
8
9
10
11
12
13
//main.cpp
int a = 0;//全局初始化區
char *p1;//全局未初始化區
main()
{
    int b;//棧
    char s[] = "abc";//棧
    char *p2;//棧
    char *p3 = "123456";//123456\0在常量區,p3在棧上。
    static int c =0;//全局(靜態)初始化區
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20);//分配得來的10和20字節的區域就在堆區。
}
發佈了21 篇原創文章 · 獲贊 1 · 訪問量 7617
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章