程序內存分配概述

五類內存

1.棧區(stackstack

主要存放函數參數值、函數局部變量等。典型操作是子程序調用時,子程序不斷佔用棧內存,而子程序也正是利用了棧先入後出的特性實現了子程序調用的功能。

棧空間從高地址向低地址延伸,是一塊連續的內存空間,且是一塊非共享區域。

2.堆區(heapheap

由程序員進行申請與釋放,如 newnewdeletedeletemallocmalloc 等方法,若程序員未釋放,則由 OSOS 進行回收。堆是從低地址向高地址擴展的內存區域,是一塊不連續的內存區域,但是一塊共享區域。

3.全局區(靜態區 / staticstatic

存儲全局變量和靜態變量的區域,程序結束後由 OSOS 釋放。

4.文字常量區

常量字符串存放區域,程序結束後由 OSOS 釋放。

5.程序代碼區

存放函數體的二進制代碼。


代碼舉例

int total = 0; //全局變量,全局區

int main(){
	int a; //棧
	char b[] = "abc"; //棧
	char *c = "123456"; //c在棧上,"123456"在常量區
	static int d = 0; //全局區
	b = (char*)malloc(10); //分配的10字節內容在堆區,但b指針仍在棧區 
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章