1. 程式人生 > >c++記憶體模型------計算機系統核心概念及軟硬體實現

c++記憶體模型------計算機系統核心概念及軟硬體實現

 c++程式語言有3中不同類項的變數:全域性變數、區域性變數和動態分配變數。變數的值儲存在計算機的記憶體中,但是變數儲存的方式取決於變數的類項。3種類型的變數分別對應儲存器中3個特定的區域:

  • 全域性變數存放在儲存器中的固定位置。
  • 區域性變數存放在執行時棧上。
  • 動態分配變數存放在堆上。

  全域性變數的宣告在所有函式的外面,在程式的執行過程中位置保持不變。區域性變數在函式中宣告,函式被呼叫時它們出現,函式結束時他們消失。動態分配變數隨著new運算子的執行出現,隨著delete運算子的執行消失。

  棧是一個值的容器,通過壓入(push)操作存入值,通過彈出(pop)操作取出值。存入和取出值的原則都是後進先出(彈出最後一個壓入的值),所以有時候棧被稱為LIFO表,Last In ,First Out

  每條執行的c++語句是一個函式的一部分。c++函式有一個返回型別、一個名字和一個引數表。程式包括一個名為main的特殊函式。通過執行main函式中的語句來執行程式。main函式中的語句有可能掉用另一個函式。當執行一個函式時,按照如下順序對執行時棧的空間進行分配:

  • 壓入返回值的儲存空間。
  • 壓入引數。
  • 壓入返回地址。
  • 壓入區域性變數的儲存空間。

  當函式結束時,按照相反的順序釋放執行時棧的儲存空間

  • 釋放區域性變數。
  • 彈出返回地址,根據返回地址確定要執行的下一條語句。
  • 釋放參數。
  • 彈出返回值,按照呼叫語句指定方式進行使用。

  不管一個函式是main函式,還是在另一個函式中被一條語句呼叫的函式,都會執行這些步驟。

計算機系統核心概念及軟硬體實現

轉載請註明出處