如果從變量值存在的時間(即生存期)來分,可將程序中的變量分為:動態存儲方式和靜態存儲方式。它們所佔用的存儲空間區域不同。

1.C++存儲空間區域

代碼區:存放可執行程序的程序代碼。靜態存儲區:存放靜態變量和全局變量。棧區(Stack):存放動態局部變量

堆區(Heap):存放new和 malloc()申請的動態內存。棧區和堆區統稱為動態存儲區。

2.動態存儲方式

動態存儲區可以存放函數的參數、自動變量、函數調用時的現場保護和返回地址等。這些以動態方式存儲的數據,在函數調用時分配動態存儲空間,函數結束時釋放這些空間,在程序執行過程中,這種分配和釋放是動態的,如果一個程序兩次調用同一函數,則第一次調用時給形參和函數中的局部變量分配內存空間,第一次調用完畢,這些空間被釋放。第二次調用時,重新給形參和函數中的局部變量分配內存空間。兩次調用過程函數中形參和局部變量的存儲空間不同。如果一個程序包含若干個函數,每個函數中的形參和局部變量的生存期並不等於整個程序的執行週期,而是當函數被調用時,動態地分配存儲空間,但函數調用完畢,分配的存儲空間將被釋放。

3.靜態存儲方式

以靜態存儲方式(全局變量和靜態局部變量)存儲的數據全部存放在靜態存儲區中,在程序開始運行前就為其分配相應的存儲空間,在程序的整個運行期間一直佔用,直到這個程序執行完畢後釋放。它的生存期就是整個程序的運行期。在程序執行過程中,它們佔據固定的存儲空間,而不是動態地進行分配和釋放。