C/C++內存分佈

一個由C/C++編譯的程序佔用的內存分爲如下幾個部分 程序員

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

二、堆區(heap) — 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式卻是相似於鏈表,呵呵。 數據結構

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

四、文字常量區 —常量字符串就是放在這裏的。 程序結束後由系統釋放 spa

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


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

char *p1 = "abc";字符串

char *p2 = "abc";//這裏p1和p2指向文字常量區的同一段字符串常量,因此p1==p2爲true編譯器

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

char a[]="abc";

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

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

相關文章
相關標籤/搜索