C++即允许程序员有两种向操作系统申请内存的方式。
前一种就是在栈上分配,申请的内存大小固定不变。
后一种是在堆上分配,申请的内存大小可以在运行的时候变化,不是固定不变的
_______+++++++++++++++++++++++++++++++++++_____________________________
栈(Stack)
: 任何程序执行前,预先分配一固定长度的内存空间,
这块内存空间被称作栈,也被叫做堆栈
即程序员自己判断可以使用哪些内存,
而不是操作系统,很明显,
上面的工作是由编译器来做的,
工作只是从操作系统变到程序自己而已,
好处就是由于程序一开始执行时就已经分配了一大块连续内存,
坏处也就是只能在编译时期分配内存
上面的工作是编译器做的,即程序员并不参与堆栈的维护。但上面已经说了,堆栈相当于在编译时期分配内存,因此一旦计算好某块内存的偏移,则这块内存就只能那么大,不能变化了
__________________________________________________________________________________________________
堆(Heap)
在Windows操作系统下,由操作系统分配的内存就叫做堆,
而栈可以认为是在程序开始时就分配的堆
因此在堆上就可以分配大小变化的内存块,
因为是运行时期即时分配的内存,
而不是编译时期已计算好大小的内存块。