C++將內存劃分爲5個區,分別是堆、棧、自由存儲區、全局、靜態存儲區、常量存儲區。
棧的特點:
- 棧存儲的是自動變量
- 棧內存的分配與釋放是由編譯器自動完成的,不需要手工控制
- 棧是先進先出的存儲結構
- 棧內存的分配至涉及一個指針的遞增,而且棧內存的分配運算內置於處理器的指令集中,因此效率很高,速度很快
- 使用棧分配的內存容量有限,在編譯器中一般只有幾MB的大小
- 注意:也可以使用alloca函數對棧內存進行動態分配,但使用alloca對棧進行動態分配、沒存釋放是由編譯器完成的,無需程序員手工操作
堆和自由存儲區的特點:
- C++對堆和自由存儲區的概念沒有作詳細的說明,他們都是C++的動態存儲區域,其性質很相似,只不過一個使用malloc和free函數,而另一個使用new和delete對內存進行分配和釋放
- 堆是動態分配的,即在運行時才分配內存
- 堆得分配和釋放編譯器不用管,而由程序員控制
- 可以在堆中分配任意數量的內存塊
- 堆內存的釋放是由程序員控制,因此容易發生內存泄漏,同時易產生內存碎片
- 堆得實現複雜,比棧的效率低很多
- 堆得空間大(一般32位系統有4GB大小),而且靈活(即在運行時才分配內存)
全局、靜態存儲區
- 全局變量和靜態變量倍分配到這個內存區域中
常量存儲區
- 這個區域放常量,不允許修改