2020 11 28(全域性變數和區域性靜態變數)

2021-10-10 23:07:40 字數 562 閱讀 8790

常量和全域性變數有著相似的特徵,都是在程式執行前就存在了。在大多數情況下,在pe檔案中的唯讀資料節中常量的節屬性被修飾為不可寫;而全域性變數和靜態變數則在屬性為可讀寫的資料節中。

在訪問方式上,區域性變數的訪問時通過棧指標相對間接訪問,而全域性變數的記憶體位址在全域性資料區,通過棧指標無法訪問到 ,但 由於全域性變數在編譯期就已經確定了具體的位址,因此編譯器在編譯的過程中可以計算出乙個固定的位址值,利用這個立即數(位址值)去間接訪問。

靜態變數分為區域性靜態變數和全域性靜態變數,全域性靜態變數和全域性變數類似,只是全域性靜態變數只能在檔案內使用,相當於全域性靜態變數等價於編譯器限制外部原始碼檔案訪問的全域性變數。

區域性靜態變數會預先被在作為全域性變數處理,而它的初始化部分只是在做賦值操作而已,那麼我們是否會有這麼乙個疑問,是不是每次進入函式內部,我們都要給這個區域性靜態變數賦值一次呢?

當然不是啦,第一次賦值後,區域性靜態變數附近會產生乙個標誌,這個標誌佔乙個位元組。通過位運算,將標誌中的一位資料置1,以此判斷區域性靜態變數是否已經被徹底初始化過。由於乙個靜態變數只是用一位,而乙個位元組是8位,因此這個標誌可以同時表示8個區域性靜態變數的初始狀態。

全域性變數和區域性變數

全域性變數 可以被不同的函式 類或檔案呼叫的變數,在函式外定義。區域性變數 只能在函式內使用,定義在函式內。區域性變數的使用 class myclass def myfun num 12 print myfun num num 正確 def myfun2 num num 1 print mufun ...

全域性變數和區域性變數

區域性變數 在方法中開闢的變數,只在方法中有效 區域性變數在定義時不會初始化,要顯式的給它乙個值 如未給它乙個初始值,雖然編譯的時候會通過,但是執行的時候會產生為初始化錯誤!方法呼叫 執行完,區域性變數便會自動釋放。在方法內的語句塊中建立的變數在編譯時假如未初始,如若使用,也會報未初始化錯誤!呼叫的...

全域性變數和區域性變數

通常的認為是定義在函式外面的就稱之為全域性變數 函式體內的稱之為區域性變數 在函式中與全域性變數同名的時候 情形1 函式內部的變數名如果第一次出現,且出現在 前面,即被視為定義乙個區域性變數。num 100 定義乙個全域性變數 defdemo num 100 這裡面的實際上是定義了乙個區域性的變數 ...