1樓:匿名使用者
1、 全域性變數的作用用這個程式塊,而區域性變數作用於當前函式;
2、前者在記憶體中分配在全域性資料區,後者分配在棧區;
3、 生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷燬而銷燬,區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在;
4、 使用方式不同:通過宣告後全域性變數程式的各個部分都可以用到,區域性變數只能在區域性使用
作業系統和編譯器通過記憶體分配的位置來知道的全域性變數分配在全域性資料段,並且在程式被執行的時候就被載入。;
編譯器通過語法詞法的分析,判斷出是全域性變數還是區域性變數。如果是全域性變數的話,編譯器在將源**翻譯成二進位制**時就為全域性變數分配好一個虛擬地址 (windows下0x00400000以上的地址,也就是所說的全域性區),所以程式在對全域性變數的操作時是對一個硬編碼的地址操做。
區域性變數的話,編譯時不分配空間,而是以相對於ebp或esp的偏移來表示區域性變數的地址,所以區域性變數記憶體是在區域性變數所在的函式被呼叫時才真正分配。 以彙編的角度來看:函式執行時,區域性變數在棧中分配,函式呼叫完畢釋放區域性變數對應的記憶體,另外區域性變數可以直接分配在暫存器中。
作業系統通過變數的分配地址就可以判斷出是區域性變數和全域性變數。
C語言靜態區域性變數和全域性變數有什麼區別,不都是在整個程式中都
1 靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。2 靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使...
靜態區域性變數和普通全域性變數以及靜態全域性變數的區別
靜態區域性變數和普通全域性變數以及靜態全集變數在編譯時,編譯器會自動給他回們分配地址。而且是從答mcu上電執行開始,一直駐留,不會被 的。而真正的區別在於他們的作用域。靜態區域性變數的作用域是在於定義它的那個函式內。由於其在編譯時編譯器就給他們分配了地址,並且做了初始化,所以它只能被初始化一次,而且...
c語言中巨集替換與定義全域性變數的區別是什麼
全域性變數 是可以在程式中任何地方使用 而且是可以修改的 巨集定義也可以在任何地方使用 但是不能在之後修改 資料型別沒有限制的 巨集定義不分配記憶體,全域性變數定義分配記憶體。巨集定義的值在程式中是不能改變的,只是巨集替換,全域性變數的值是可以在程式中更改的。巨集定義不存在型別問題,它的引數也是無型...