国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

從匯編看c++函數靜態static關鍵字在使用中的說明

2020-02-24 14:35:18
字體:
來源:轉載
供稿:網友

從匯編看c++函數靜態static關鍵字在使用中的說明,c++中的static關鍵字使得函數里面的局部變量的存活期不在局限于函數里面,而是變為在整個程序生命期里面都有效,下面從匯編語言看其原理。

下面是c++源代碼:


void add() {
??? static int i = 1;
??? i++;
}
int main() {
?? add();

}


下面是main對應的匯編碼

?

?


; 5??? : int main() {

?

??? push??? ebp
??? mov??? ebp, esp

; 6??? :??? add();

??? call??? ?add@@YAXXZ??????????????? ; 調用add

; 7??? :???
; 8??? : }

??? xor??? eax, eax
??? pop??? ebp
??? ret??? 0


下面是add函數對應的匯編碼:

?

?


; 1??? : void 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不在他們的調用棧里面。

?

再看下面的匯編碼:


_DATA??? SEGMENT
?i@?1??add@@YAXXZ@4HA DD 01H??????????????? ; 為變量i聲明存儲空間
; Function compile flags: /Odtp
_DATA??? ENDS


這條語句為i預先分配了存儲空間,并且在上面兩個函數匯編碼的外面定義。因此,函數里面由static關鍵字修飾的變量生命期存在于整個程序里面,但是,可見性依然只在add函數里面,在外面訪問不到.

以上就是從匯編看c++函數靜態static關鍵字在使用中的說明,想必都已有了一定的了解,更多關于c++的內容請繼續關注武林技術頻道。

?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 兴业县| 汤原县| 长顺县| 江华| 潞西市| 安陆市| 郯城县| 平度市| 明水县| 墨竹工卡县| 出国| 大英县| 嘉荫县| 资兴市| 南和县| 富顺县| 建水县| 色达县| 德阳市| 阜阳市| 清丰县| 巧家县| 余江县| 繁昌县| 无锡市| 巍山| 察隅县| 乌拉特后旗| 尼勒克县| 渭南市| 和平县| 永新县| 田林县| 郸城县| 鄯善县| 钟山县| 咸宁市| 西峡县| 财经| 沙洋县| 高州市|