1. 程式人生 > >C語言記憶體區域

C語言記憶體區域

記憶體

變數

變數型別 作用域 生命週期 儲存位置
區域性變數 函式內部 從變數建立到函式結束 棧區
全域性變數 整個專案 從程式建立到程式銷燬 資料區
靜態區域性變數 函式內部 從程式建立到程式銷燬 資料區
靜態全域性變數 所處檔案 從程式建立到程式銷燬 資料區

函式

函式型別 作用域 生命週期 儲存位置
全域性函式 整個專案 從程式建立到程式銷燬 程式碼區
靜態函式 所處檔案 從程式建立到程式銷燬 程式碼區

記憶體分割槽

  • 程式碼區(text)

    存放可執行檔案的二進位制程式碼(函式)

  • 資料區

    • 初始化資料區(data)

      存放已初始化的靜態資料、已初始化的全域性資料

    • 未初始化資料區(bss)

      存放未初始化的靜態全域性資料、未初始化的全域性資料

    • 常量區

      存放字串常量及其他常量資料

  • 棧區(stack)

    存放區域性變數、函式資訊、函式引數、函式返回值等資訊

  • 堆區(heap)

    動態分配記憶體

分配記憶體規則

  • 在記憶體中,從低地址到高地址:依次為程式碼區、資料區(常量區,初始化資料區、未初始化資料區)、堆區、棧區分配記憶體空間
  • 在程式碼區、資料區、堆區中分配記憶體是從低地址到高地址,但在棧區是從高地址到低地址分配記憶體