a) 靜態變數和全域性變數
i. 全域性變數與區域性變數:
1. 全域性變數:儲存在(非)初始化資料段(全域性靜態區)中;作用域是可以被別的檔案引用extern關鍵字;生命週期是整個程式
2. 區域性變數:儲存在定義自己函式體的棧中;作用域是只對本函式體可見;生命週期是函式體
ii. 靜態變數與非靜態變數:
1. 靜態變數:儲存在靜態區(全域性靜態區)(是和全域性變數存放在一塊的,初始化的靜態變數和初始化的全域性變數放在一塊兒;非初始化的靜態變數和非初始化的全域性變數放在一塊兒);作用域是取決於對方是全域性變數,還是區域性變數;生命週期是整個程式
b) 辨析
i. static全域性變數和普通全域性變數有什麼區別?
1. static全域性變數和普通全域性變數儲存區域相同,不同的是:static
全域性變數只在宣告此
static
全域性變數的檔案中有效,普通全域性變數對整個程式都有效。(即儲存位置相同,生命週期相同,但作用域發生了變化)
ii. static區域性變數和普通區域性變數有什麼區別?
1. static區域性變數儲存在靜態區,普通區域性變數儲存在棧中。因此static
區域性變數的生命週期是整個程式,而普通區域性變數的生命週期則只是函式體呼叫期間。(即作用域相同,但儲存區不同,生命週期也不同)
2.記憶體分配
a)程式占用記憶體分類
i.從高位位址開始依次是(命令列引數和環境變數)+棧+堆+全域性靜態區+正文段+文字常量區
命令列引數與環境變數
棧區(由高位址向低位址擴散) 存放函式的引數值,區域性變數值等
堆區(由低位址向高位址擴散) 在程式中開闢的另一塊儲存區域
全域性靜態區 全域性變數和靜態變數
正文段 程式的二進位制**
文字常量區 常量字串
b)記憶體分配方式
i.在全域性靜態區分配:在程式編譯的時候就已經分配好了,這塊內存在程式的整個執行期間都存在。(全域性變數和靜態變數)
ii.在棧區分配:在執行函式時函式內區域性變數,引數等在棧上建立,在函式結束時這些記憶體自動釋放
iii.在堆區分配:程式設計師自己用new,malloc分配free、delete**
c)new/delete malloc/free
i.malloc/free是c語言的標準函式庫,所以它不會自動呼叫構造和析構函式,而new和delete是c++的運算子,包裝之後的malloc/free,會自動呼叫類的構造和析構函式。在功能上new/delete完全覆蓋malloc/free。
關於C base關鍵字的記憶體分析
最近做了幾道面試題,發現base關鍵字出的題目還比較多。所以在這裡針對base關鍵字做乙個記憶體的剖析,希望日後可以用到。先看下面一道題目 最後在main方法中例項化子類testchild,並且呼叫其show方法。問輸出結果是什麼?testchild child new testchild chil...
C base和this的區別
base常用於,在派生類物件初始化時和基類進行通訊。base可以訪問基類的公有成員和受保護成員,私有成員是不可訪問的。this指代類物件本身,用於訪問本類的所有常量 字段 屬性和方法成員,而且不管訪問元素是任何訪問級別。因為,this僅僅侷限於物件內部,物件外部是無法看到的,這就是this的基本思想...
C Base 容器 集合概述
stl容器類 vector 還有的三個成員變數 start finish end of storage start,finish vector 大小為 finish start vector 容量為 end of storage start 函式 iterator vector begin iter...