어 셈 블 리 에서 c+중 함수 에 있 는 static 키워드 의 사용 설명

1428 단어 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 함수 안에 만 있 고 밖에서 접근 할 수 없습니다.

좋은 웹페이지 즐겨찾기