內存分爲五大區:程序員
1.棧區:在函數內部聲明的變量都存在棧區,只管申請,系統會幫咱們自動釋放,釋放的時間是做用域結束,遵循先進後出(first in last off(FILO)),棧的開闢是連續的,不會形成內存碎片,效率比較高(用來存放臨時變量和正在運行的函數,當函數被調用的時候就會入棧,執行完畢的時候就會出棧)函數
2. 堆區:堆區是五個區中佔用比例最大的一個區,堆區須要咱們手動的開闢,手動釋放,遵循隊列的原則(first in first off(FIFO))(凡是用malloc,和alloc開闢的內存空間都是在堆裏面的,而且堆裏面的內存空間須要程序員本身管理,有開闢就必需要有釋放,否則會內存泄露)spa
3.全局區:(靜態區)存放的是全局變量和靜態變量,生命週期長,一直到程序結束。靜態變量是用static修飾的變量,只初始化一次(靜態區:static修飾的變量都在該區)生命週期
1.static在靜態區開闢內存空間隊列
2.static修飾的靜態變量只初始化一次內存
3.生命週期爲整個應用程序作用域
4.static修飾變量編譯
(1)static修飾的變量儲存在靜態區,其生命週期爲整個應用程序ast
(2)static修飾的全局變量能夠被其餘程序使用,沒有被static修飾的全局變量只能在源文件中使用效率
(3)static修飾的局部變量,雖然生命週期是整個應用程序週期,可是也只能被做用域內的函數和變量使用
5.static修飾的函數,只能被源文件使用,沒有被static修飾的函數,能夠跨文件使用,正好和static修飾的變量相反
4. 常量區:主要存放都是一個常量,例如:"hello",'h',78,.....常量區的數據不能夠被修改(用來存放程序中的常量例如:2,4,5)
5. 代碼區:所編寫的源文件,被編譯過的二進制文件都是存放在代碼區,代碼區是內存中最小的一個區(用來存放代碼自己)