常見的存儲區域可分為:
1、棧
由編譯器在需要的時候分配,在不需要的時候自動清楚的變量的存儲區。里面的變量通常是局部變量、函數參數等。
2、堆
由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,程序會一直占用內存,導致內存泄漏,在程序結束后,操作系統會自動回收。
3、自由存儲區
由malloc等分配的內存塊,它和堆是十分相似的,不過它是用free來釋放分配的內存。
4、全局/靜態存儲區
全局變量和靜態變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區分了,他們共同占用同一塊內存區。
5、常量存儲區
這是一塊比較特殊的存儲區,他們里面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改)。
例1:C語言程序
- int x;
- void main()
- {
- }
變量x存儲在內存哪個區域?
答:在采用段式內存管理的架構中,BSS段(bss segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域。
BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態存儲區。
例2:static全局變量與普通全局變量有什么區別?
答:static全局變量和普通全局變量存儲區域相同,不同的是:
static全局變量只在聲明此static全局變量的文件中有效;
普通全局變量對整個源程序都有效,當此源程序包含多於一個文件的程序時,對其他文件依然有效。
例3:static局部變量與普通局部變量的區別?
答:static局部變量的存儲區為靜態存儲區,普通局部變量的存儲區為棧;
static局部變量生存周期為整個源程序,但是只能在聲明其的函數中調用,並且其值與上一次的結果有關;而普通局部變量的生存周期為聲明其函數的周期,超過特定的范圍其值會被重新初始化;
static局部變量如果未初始化其值默認為0,而普通局部變量則不確定。
轉自http://blog.csdn.net/xl890727/article/details/12657073