어 셈 블 리 에서 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 함수 안에 만 있 고 밖에서 접근 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다트 타이핑 💫 🌌 ✨Dart, tip kontrolünü iki farklı zamanda gerçekleştirir: • Kod derlendiğinde (kod yeniden yüklenir/veya önceden derlenir)...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.