1、 全域性變數的作用用這個程式塊,而區域性變數作用於當前函式2、前者在記憶體中分配在全域性資料區,後者分配在棧區3、 生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷燬而銷燬,區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在4、 使用方式不同:透過聲明後全域性變數程式的各個部分都可以用到,區域性變數只能在區域性使用作業系統和編譯器透過記憶體分配的位置來知道的全域性變數分配在全域性資料段,並且在程式被執行的時候就被載入。編譯器透過語法詞法的分析,判斷出是全域性變數還是區域性變數。如果是全域性變數的話,編譯器在將原始碼翻譯成二進位制程式碼時就為全域性變數分配好一個虛擬地址 (windows下0x00400000以上的地址,也就是所說的全域性區),所以程式在對全域性變數的操作時是對一個硬編碼的地址操做。 區域性變數的話,編譯時不分配空間,而是以相對於ebp或esp的偏移來表示區域性變數的地址,所以區域性變數記憶體是在區域性變數所在的函式被呼叫時才真正分配。 以彙編的角度來看:函式執行時,區域性變數在棧中分配,函式呼叫完畢釋放區域性變數對應的記憶體,另外區域性變數可以直接分配在暫存器中。 作業系統透過變數的分配地址就可以判斷出是區域性變數和全域性變數。
1、 全域性變數的作用用這個程式塊,而區域性變數作用於當前函式2、前者在記憶體中分配在全域性資料區,後者分配在棧區3、 生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷燬而銷燬,區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在4、 使用方式不同:透過聲明後全域性變數程式的各個部分都可以用到,區域性變數只能在區域性使用作業系統和編譯器透過記憶體分配的位置來知道的全域性變數分配在全域性資料段,並且在程式被執行的時候就被載入。編譯器透過語法詞法的分析,判斷出是全域性變數還是區域性變數。如果是全域性變數的話,編譯器在將原始碼翻譯成二進位制程式碼時就為全域性變數分配好一個虛擬地址 (windows下0x00400000以上的地址,也就是所說的全域性區),所以程式在對全域性變數的操作時是對一個硬編碼的地址操做。 區域性變數的話,編譯時不分配空間,而是以相對於ebp或esp的偏移來表示區域性變數的地址,所以區域性變數記憶體是在區域性變數所在的函式被呼叫時才真正分配。 以彙編的角度來看:函式執行時,區域性變數在棧中分配,函式呼叫完畢釋放區域性變數對應的記憶體,另外區域性變數可以直接分配在暫存器中。 作業系統透過變數的分配地址就可以判斷出是區域性變數和全域性變數。