C/C++中內存分爲以下五個部分:
1.棧區: 存放函數的參數值,局部變量等。由編譯器自動分配釋放,大小固定,一般爲2M或者1M
2.堆區:使用malloc或者new出來的對象存放的區域,可以由程序員自己申請和釋放。
3.全局區(靜態區):存放全局變量和靜態變量。初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和靜態變量在相鄰的另一塊區域。
4.常量區:常量字符串等
5.代碼區:存放函數體的二進制代碼
其中棧和堆的區別:
1.申請方式:
堆由程序員自己申請釋放;
棧由編譯器自動分配。
2.申請大小:
堆向高地址擴展,是不連續的內存區域,大小受限於計算機系統中有效的虛擬內存。空間比較靈活也比較大。
棧的容量和棧頂地址由系統預先規定好的,向低地址擴展,大小爲2M或者1M,可用空間較小。
3.申請效率
棧速度較快。
堆分配一般較慢,且容易產生碎片。