C語言記憶體區域
阿新 • • 發佈:2018-12-09
記憶體
變數
變數型別 | 作用域 | 生命週期 | 儲存位置 |
---|---|---|---|
區域性變數 | 函式內部 | 從變數建立到函式結束 | 棧區 |
全域性變數 | 整個專案 | 從程式建立到程式銷燬 | 資料區 |
靜態區域性變數 | 函式內部 | 從程式建立到程式銷燬 | 資料區 |
靜態全域性變數 | 所處檔案 | 從程式建立到程式銷燬 | 資料區 |
函式
函式型別 | 作用域 | 生命週期 | 儲存位置 |
---|---|---|---|
全域性函式 | 整個專案 | 從程式建立到程式銷燬 | 程式碼區 |
靜態函式 | 所處檔案 | 從程式建立到程式銷燬 | 程式碼區 |
記憶體分割槽
-
程式碼區(text)
存放可執行檔案的二進位制程式碼(函式)
-
資料區
-
初始化資料區(data)
存放已初始化的靜態資料、已初始化的全域性資料
-
未初始化資料區(bss)
存放未初始化的靜態全域性資料、未初始化的全域性資料
-
常量區
存放字串常量及其他常量資料
-
-
棧區(stack)
存放區域性變數、函式資訊、函式引數、函式返回值等資訊
-
堆區(heap)
動態分配記憶體
分配記憶體規則
- 在記憶體中,從低地址到高地址:依次為程式碼區、資料區(常量區,初始化資料區、未初始化資料區)、堆區、棧區分配記憶體空間
- 在程式碼區、資料區、堆區中分配記憶體是從低地址到高地址,但在棧區是從高地址到低地址分配記憶體