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