a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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++的內容請繼續關注武林技術頻道。

?

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

圖片精選

主站蜘蛛池模板: 黄色大片网站在线观看 | 成人在线免费视频 | 一级毛片观看 | 日韩中文在线 | 欧美精品免费在线 | 久免费视频 | 一区二区三区回区在观看免费视频 | 欧美精品一区二区在线观看 | 神马久久久久久久久久 | 在线黄色av | 久久精品欧美 | 日本精品一区二区三区视频 | 国产精品天天干 | 欧美一级黄色影院 | 亚洲成人基地 | 一区二区三区在线播放 | 精品一区久久 | 亚洲视频www | 欧美日韩精品一区二区三区在线观看 | 亚洲一二三区影视 | 久久99久久精品视频 | 在线视频中文字幕 | 国产精品久久 | 中文字幕欧美日韩一区 | 久久波多野结衣 | 久久久久久久一区二区三区 | 国产一级免费 | 草视频在线 | 久国产| 欧美日韩一区二区不卡 | 色欧美综合 | 亚洲精品一区二区三区蜜桃久 | 久久免费视频国产 | 免费不卡视频在线观看 | 久久久久久久久久久免费 | 日韩电影一区二区三区 | 久久国产精品久久久久久 | 欧美日韩大片在线观看 | 色婷婷综合久久久久中文一区二 | 中文字幕免费在线观看 | 欧美1区 |