欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從匯編看c++中函數(shù)里面的static關(guān)鍵字的使用說明

 更新時(shí)間:2013年05月06日 10:22:42   作者:  
c++中的static關(guān)鍵字使得函數(shù)里面的局部變量的存活期不在局限于函數(shù)里面,而是變?yōu)樵谡麄€(gè)程序生命期里面都有效

下面從匯編語言看其原理.

下面是c++源代碼:

復(fù)制代碼 代碼如下:

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

}

下面是main對(duì)應(yīng)的匯編碼
復(fù)制代碼 代碼如下:

; 5    : int main() {

    push    ebp
    mov    ebp, esp

; 6    :    add();

    call    ?add@@YAXXZ                ; 調(diào)用add

; 7    :   
; 8    : }

    xor    eax, eax
    pop    ebp
    ret    0


下面是add函數(shù)對(duì)應(yīng)的匯編碼:
復(fù)制代碼 代碼如下:

; 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;執(zhí)行加法
    mov    DWORD PTR ?i@?1??add@@YAXXZ@4HA, eax;存變量i的值

; 4    : }

    pop    ebp
    ret    0


可以看,不論是main函數(shù),還是add函數(shù)里面,我們都看不到為i分配存儲(chǔ)空間,也就是說,i不在他們的調(diào)用棧里面。

再看下面的匯編碼:

復(fù)制代碼 代碼如下:

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

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

相關(guān)文章

  • 淺析iterator與指針的區(qū)別

    淺析iterator與指針的區(qū)別

    指針和iterator都支持減法運(yùn)算,指針-指針得到的是兩個(gè)指針之間的距離,迭代器-迭代器得到的是兩個(gè)迭代器之間的距離
    2013-10-10
  • C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入淺析

    C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入淺析

    這篇文章主要介紹了C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • C++ getline函數(shù)用法詳解

    C++ getline函數(shù)用法詳解

    這篇文章主要介紹了C++ getline函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MFC自定義消息的實(shí)現(xiàn)方法

    MFC自定義消息的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC自定義消息的實(shí)現(xiàn)方法,通過該示例可以更好的理解MFC的消息封裝機(jī)制,以便更加靈活的打造個(gè)性化的windows應(yīng)用程序,需要的朋友可以參考下
    2014-07-07
  • C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)

    C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析C語言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別

    淺析C語言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別

    以下是對(duì)C語言中printf(),sprintf(),scanf(),sscanf()的用法以及區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • 詳解C++編程中的vector類容器用法

    詳解C++編程中的vector類容器用法

    vector是一個(gè)標(biāo)準(zhǔn)庫(kù)中的容器,使用時(shí)需要包含#include <vector>頭文件,也可以說vector是一個(gè)類模板而不是一種數(shù)據(jù)類型,對(duì)它的定義,需要指定類型,需要的朋友可以參考下
    2016-05-05
  • C語言中#define在多行宏定義出錯(cuò)的原因及分析

    C語言中#define在多行宏定義出錯(cuò)的原因及分析

    這篇文章主要介紹了C語言中#define在多行宏定義出錯(cuò)的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++?Boost?Format超詳細(xì)講解

    C++?Boost?Format超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11

最新評(píng)論