從匯編看c++函數(shù)靜態(tài)static關(guān)鍵字在使用中的說明,c++中的static關(guān)鍵字使得函數(shù)里面的局部變量的存活期不在局限于函數(shù)里面,而是變?yōu)樵谡麄€程序生命期里面都有效,下面從匯編語言看其原理。
下面是c++源代碼:
下面是main對應(yīng)的匯編碼
?
?
?
??? push??? ebp
??? mov??? ebp, esp
; 6??? :??? add();
??? call??? ?add@@YAXXZ??????????????? ; 調(diào)用add
; 7??? :???
; 8??? : }
??? xor??? eax, eax
??? pop??? ebp
??? ret??? 0
下面是add函數(shù)對應(yīng)的匯編碼:
?
?
?
??? push??? ebp
??? mov??? ebp, esp
; 2??? :???? static int i = 1;
; 3??? :???? i++;
??? mov??? eax, DWORD PTR ?i@?1??add@@YAXXZ@4HA;取變量i的值
??? add??? eax, 1;執(zhí)行加法
??? mov??? DWORD PTR ?i@?1??add@@YAXXZ@4HA, eax;存變量i的值
; 4??? : }
??? pop??? ebp
??? ret??? 0
可以看,不論是main函數(shù),還是add函數(shù)里面,我們都看不到為i分配存儲空間,也就是說,i不在他們的調(diào)用棧里面。
?
再看下面的匯編碼:
這條語句為i預(yù)先分配了存儲空間,并且在上面兩個函數(shù)匯編碼的外面定義。因此,函數(shù)里面由static關(guān)鍵字修飾的變量生命期存在于整個程序里面,但是,可見性依然只在add函數(shù)里面,在外面訪問不到.
以上就是從匯編看c++函數(shù)靜態(tài)static關(guān)鍵字在使用中的說明,想必都已有了一定的了解,更多關(guān)于c++的內(nèi)容請繼續(xù)關(guān)注武林技術(shù)頻道。
?
新聞熱點
疑難解答
圖片精選