內(nèi)存區(qū)域劃分
1. 棧區(qū)(stack)
1)程序運行時由編譯器自動分配的一塊連續(xù)的內(nèi)容,存放函數(shù)的參數(shù)值谒获,局部變量的值等
2)程序結(jié)束時由編譯器自動釋放
3) 棧由系統(tǒng)自動分配看铆,程序員無法控制
4)只要棧的剩余空間大于所申請空間心铃,系統(tǒng)將為程序提供內(nèi)存腥沽,否則將報異常提示棧溢出萧恕。
5)存取方式姑子,先進后出
2. 堆區(qū)(heap)
1)在內(nèi)存開辟另一塊不連續(xù)的存儲區(qū)域乎婿。一般由程序員分配釋放,
2)若程序員不釋放街佑,程序結(jié)束時由系統(tǒng)回收
3)首先應(yīng)該知道操作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表谢翎,當(dāng)系統(tǒng)收到程序的申請時,會遍歷該鏈表沐旨,尋找第一個空間大于所申請空間的堆結(jié)點森逮,然后將該結(jié)點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間分配給程序磁携。
3. 靜態(tài)存儲區(qū)(static)
編譯器編譯時分配內(nèi)存褒侧。全局變量和靜態(tài)變量的存儲是放在一塊的。
將變量定義的類型前加static,則該變量存儲在靜態(tài)存儲區(qū)
static:
1)只初始化一次
2)只有程序退出才釋放
4. 常量區(qū)
1) 常量占用內(nèi)存,只讀狀態(tài),決不可修改
2)常量字符串就是放在這里的,程序結(jié)束后由系統(tǒng)釋放
5. 代碼區(qū)
所有的語句編譯后會生成CPU指令存儲在代碼區(qū).