全局變量的生命期和可見性是整個程序的運行期間,下面就來用匯編來看一下實際情況:
c++源碼:
int main() {
int j = i;
}
下面是匯編代碼:
; 3 : int main() {
push ebp
mov ebp, esp
push ecx;為局部變量分配4字節(jié)存儲區(qū)
; 4 : int j = i;
mov eax, DWORD PTR ?i@@3HA ; 獲取全局變量i的的值
mov DWORD PTR _j$[ebp], eax;eax存有i的值,將它賦給局部變量j
; 5 : }
xor eax, eax
mov esp, ebp;//棧頂指針恢復,釋放為j分配的棧空間
pop ebp
ret 0
_main ENDP
_TEXT ENDS
實際上,在操作系統(tǒng)載入可執(zhí)行文件的時候,它首先將數(shù)據(jù)區(qū)中的數(shù)據(jù)載入相應的內(nèi)存,然后才開始運行程序,因此,全局變量產(chǎn)生在文件加載之后,第一條程序語言執(zhí)行之前。
新聞熱點
疑難解答