局部變量存儲區域靜態變量存儲區域static變量存儲區域


常見的存儲區域可分為:

1、棧

由編譯器在需要的時候分配,在不需要的時候自動清楚的變量的存儲區。里面的變量通常是局部變量、函數參數等。

2、堆

由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,程序會一直占用內存,導致內存泄漏,在程序結束后,操作系統會自動回收。

3、自由存儲區

由malloc等分配的內存塊,它和堆是十分相似的,不過它是用free來釋放分配的內存。

4、全局/靜態存儲區

全局變量和靜態變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區分了,他們共同占用同一塊內存區。

5、常量存儲區

這是一塊比較特殊的存儲區,他們里面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改)。

 

例1:C語言程序

 

[cpp]  view plain copy print ?
 
  1. int x;  
  2. void main()  
  3. {  
  4. }  

變量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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM