지역변수와 값 전달

CJB_ny·2022년 8월 2일
0

C++ 정리

목록 보기
26/95
post-thumbnail

전역변수는 데이터 영역에 들어가는데

조금더 자세히 보면은

데이터 영역안에서도

초기화 여부랑, const여부에 따라서

.rodata, .data, .bss 에 들어간다.

.data는 초기화 하지 않은거

.bss는 초기화한거?

(근데 이부분 그냥 데이터 영역에 들어가는거만 생각해도 OK)

스택 메모리 호출 순서

[매개변수][RET][지역변수]

이게 삼총사인데

[매개변수][RET] 이부분은 이전 함수에서 찝어주는 부분이다.

그래서

[매개변수][RET][지역변수][매개변수][RET][지역변수]

함수 두번 호출한경우

앞에 [매개변수][RET]는 이전 함수가 대신 넣어준 부분이다.

[지역변수] 부분이 온전히 호출당한 함수가 관리하는 스택 부분이다.

지역변수 -> 함수 전달 메모리 ❗

현재 main안에 hp라는 지역변수가 있는데 이것을

increaseHP안에 넘겨주게되면은

위에 [지역변수]부분에서 전달을 하는게 아니라

다음 삼총사

  1. [매개변수][RET][지역변수] 2. [매개변수][RET][지역변수]

2의 [매개변수] 통에다가

hp라는 값을 "복사"를 해서 넣어주는 것이다.

처음 지역변수에 hp = 1있는데

다른 함수를 호출해서 매개변수를 전달을 해주면

이렇게 넘겨주게 되는 것이다.

정리 ❗

매개변수랑 return 주소는 이전함수가 정해준다.

return 주소는 현재 함수의 주소이다.

return 주소는 call하는 순간 내 return 주소를 넣어준다.

그다음에 이제

상대방 시작 함수의 주소로(코드로) 넘어가는 부분이

[지역변수] 부분이다.

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글