어 셈 블 리 에서 c++에서 변수 유형 에 대한 심도 있 는 분석

1518 단어 c + +변수 형식
전역 변수의 생명 기와 가시 성 은 전체 프로그램의 운행 기간 입 니 다.다음은 어 셈 블 리 로 실제 상황 을 살 펴 보 겠 습 니 다.
c++소스 코드:

int i = 2;//

int main() {
    int j = i;
}

다음은 어 셈 블 리 코드 입 니 다.

PUBLIC    ?i@@3HA                        ; i
_DATA    SEGMENT
?i@@3HA    DD    02H                    ; i
_DATA    ENDS
PUBLIC    _main
; Function compile flags: /Odtp
; File c:\users\administrator\desktop\c++\test\a.cpp
_TEXT    SEGMENT
_j$ = -4                        ; size = 4
_main    PROC

; 3    : int main() {

    push    ebp
    mov    ebp, esp
    push    ecx; 4

; 4    :     int j = i;

    mov    eax, DWORD PTR ?i@@3HA            ; i
    mov    DWORD PTR _j$[ebp], eax;eax i , j

; 5    : }

    xor    eax, eax
    mov    esp, ebp;// , j
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS

어 셈 블 리 언어 에서 볼 수 있 습 니 다.전역 변수 i 의 메모리 가 메모리 에 분 배 된 데이터 영역(DATA 지정)따라서 프로그램 이 실행 되 는 과정 에서 항상 존재 하기 때문에 프로그램의 모든 부분 에 접근 할 수 있 고 프로그램 이 끝 날 때 소각 할 수 있 습 니 다.한편,부분 변수 j 의 메모 리 는 main 함수 에서 스 택 에서 동적 으로 분 배 됩 니 다.또한 main 함수 가 끝 난 후에 이 공간 이 방출 되 기 때문에 main 함수 밖에서 부분 변수 j 에 접근 할 수 없습니다.
실제로 운영 체제 에서 실행 가능 한 파일 을 불 러 올 때 데이터 영역 에 있 는 데 이 터 를 해당 하 는 메모리 에 불 러 온 다음 에 프로그램 을 실행 하기 시작 합 니 다.따라서 전역 변 수 는 파일 을 불 러 온 후에 첫 번 째 프로그램 언어 가 실행 되 기 전에 발생 합 니 다.

좋은 웹페이지 즐겨찾기