전역변수는 데이터 영역에 들어가는데
조금더 자세히 보면은
데이터 영역안에서도
초기화 여부랑, const여부에 따라서
.rodata, .data, .bss 에 들어간다.
.data는 초기화 하지 않은거
.bss는 초기화한거?
(근데 이부분 그냥 데이터 영역에 들어가는거만 생각해도 OK)
[매개변수][RET][지역변수]
이게 삼총사인데
[매개변수][RET] 이부분은 이전 함수에서 찝어주는 부분이다.
그래서
[매개변수][RET][지역변수][매개변수][RET][지역변수]
함수 두번 호출한경우
앞에 [매개변수][RET]는 이전 함수가 대신 넣어준 부분이다.
[지역변수] 부분이 온전히 호출당한 함수가 관리하는 스택 부분이다.
현재 main안에 hp라는 지역변수가 있는데 이것을
increaseHP안에 넘겨주게되면은
위에 [지역변수]부분에서 전달을 하는게 아니라
다음 삼총사
- [매개변수][RET][지역변수] 2. [매개변수][RET][지역변수]
2의 [매개변수] 통에다가
hp라는 값을 "복사"를 해서 넣어주는 것이다.
처음 지역변수에 hp = 1있는데
다른 함수를 호출해서 매개변수를 전달을 해주면
이렇게 넘겨주게 되는 것이다.
매개변수랑 return 주소는 이전함수가 정해준다.
return 주소는 현재 함수의 주소이다.
return 주소는 call하는 순간 내 return 주소를 넣어준다.
그다음에 이제
상대방 시작 함수의 주소로(코드로) 넘어가는 부분이
[지역변수] 부분이다.