C/C++內存分布

jopen 10年前發布 | 21K 次閱讀 C/C++開發 C/C++

一個由C/C++編譯的程序占用的內存分為以下幾個部分 

1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。 

2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。 

3、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放 

4、文字常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放 

5、程序代碼區—存放函數體的二進制代碼。

 

數組要么在靜態存儲區被創建(如全局數組),要么在棧上被創建。指針可以隨時指向任意類型的內存塊。

char *p1 = "abc";

char *p2 = "abc";//這里p1和p2指向文字常量區的同一段字符串常量,所以p1==p2為true

cout<<(p1==p2)<<endl;//true

char a[]="abc";

char b[]="abc";//數組a和數組b是在棧區分配的,他們只是內容一樣而已,其自身的地址是不一樣的,所以a==b為false

cout<<(a==b)<<endl;//false

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!