C++即允許程序員有兩種向操作系統申請內存的方式。
前一種就是在棧上分配,申請的內存大小固定不變。
后一種是在堆上分配,申請的內存大小可以在運行的時候變化,不是固定不變的
_______+++++++++++++++++++++++++++++++++++_____________________________
棧(Stack)
: 任何程序執行前,預先分配一固定長度的內存空間,
這塊內存空間被稱作棧,也被叫做堆棧
即程序員自己判斷可以使用哪些內存,
而不是操作系統,很明顯,
上面的工作是由編譯器來做的,
工作只是從操作系統變到程序自己而已,
好處就是由于程序一開始執行時就已經分配了一大塊連續內存,
壞處也就是只能在編譯時期分配內存
上面的工作是編譯器做的,即程序員并不參與堆棧的維護。但上面已經說了,堆棧相當于在編譯時期分配內存,因此一旦計算好某塊內存的偏移,則這塊內存就只能那么大,不能變化了
__________________________________________________________________________________________________
堆(Heap)
在Windows操作系統下,由操作系統分配的內存就叫做堆,
而棧可以認為是在程序開始時就分配的堆
因此在堆上就可以分配大小變化的內存塊,
因為是運行時期即時分配的內存,
而不是編譯時期已計算好大小的內存塊。