C++對內存區的劃分

C++將內存劃分爲5個區,分別是堆、棧、自由存儲區、全局、靜態存儲區、常量存儲區。

棧的特點:

  • 棧存儲的是自動變量
  • 棧內存的分配與釋放是由編譯器自動完成的,不需要手工控制
  • 棧是先進先出的存儲結構
  • 棧內存的分配至涉及一個指針的遞增,而且棧內存的分配運算內置於處理器的指令集中,因此效率很高,速度很快
  • 使用棧分配的內存容量有限,在編譯器中一般只有幾MB的大小
  • 注意:也可以使用alloca函數對棧內存進行動態分配,但使用alloca對棧進行動態分配、沒存釋放是由編譯器完成的,無需程序員手工操作

堆和自由存儲區的特點:

  • C++對堆和自由存儲區的概念沒有作詳細的說明,他們都是C++的動態存儲區域,其性質很相似,只不過一個使用malloc和free函數,而另一個使用new和delete對內存進行分配和釋放
  • 堆是動態分配的,即在運行時才分配內存
  • 堆得分配和釋放編譯器不用管,而由程序員控制
  • 可以在堆中分配任意數量的內存塊
  • 堆內存的釋放是由程序員控制,因此容易發生內存泄漏,同時易產生內存碎片
  • 堆得實現複雜,比棧的效率低很多
  • 堆得空間大(一般32位系統有4GB大小),而且靈活(即在運行時才分配內存)

全局、靜態存儲區

  • 全局變量和靜態變量倍分配到這個內存區域中

常量存儲區

  • 這個區域放常量,不允許修改

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章