작성
·
703
2
CreatePlayer안에서
ret라는 변수를 만들고
뭔가 수작을 부리고 다시 리턴으로 돌려주는데
CreatePlayer에서 생성한 지역변수의 값이
EnterLobby의 지역변수값 안으로들어 간거잖아요
ret가 지역변수면 값이 전달이안될텐데 구조체와 구조체로 만든 모든 변수는 전역변수 취급이 되는건가요?
답변 1
4
CreatePlayer에서 생성한 지역변수의 값이 EnterLobby의 지역변수값 안으로들어 간거잖아요
-> 이건 맞습니다.
구조체로 만든 모든 변수는 전역변수 취급이 되는건가요?
-> 물론 그건 아닙니다.
사실 정답은 질문에서 말씀주신 부분에 있는데,
지역변수의 [값]이 EnterLobby 지역변수 [값] 안으로 들어간 것입니다.
즉 복사가 일어나는 것이죠.
return ret을 할 때, 그 결과 값을 레지스터(eax)나 스택 어딘가에다가 임시 저장했다가,
그것을 EnterLobby 지역변수에 복사하게 됩니다.
참고로 요즘 컴파일러는 똑똑해서
복사 횟수를 최대한 줄이기 위해 CreatePlayer 쪽 스택프레임이 아니라,
막바로 EnterLobby 지역변수 안에다 다이렉트로 값을 쓰는 경우도 있습니다.