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