c++ 의 pass by reference 에 대한 컴파일러 내부 처리 방법이 ?
글쓴이: ssehoony / 작성시간: 수, 2004/05/12 - 8:12오후
렌퍼런스에 대한 컴파일러 내부 처리 방법이 어떻게 구현되는 건지 궁금해서 올립니다.
일단 제가 나름대로 가설을 세워본건 이렇습니다.
int i = 10; // 컴파일타임때 심볼테이블에 i 가 추가 된다. // 실제 스택에 주소를 하나 할당한다. int &ri = i; // 컴파일타임때 심볼테이블에 ri 가 추가된다. // i 의 주소를 사용하므로 별도의 주소를 할당하지 않는다. // 컴파일타임때 스택포인터에서 i 까지의 상대위치를 알아낼 수 있다.
위와 같은 방법을 사용하지 않을까 하는 짐작을 했습니다.
그런데 함수 파라미터로 레퍼런스를 넘기면 컴파일 타임때 스택포인터에서 부터 파라미터까지의 상대위치를 알아낼 수 없는 경우가 있더군요.
그렇다면 "위의 방식이 아닌 다른 방법을 사용할 것이다." 라는 생각이 들더군요.
다른 방식을 생각해봤을 때
제 '두'로 생각해 낼 수 있는 수준은
그럼 실제로(내부적으로)는 포인터를 넘기는게 아닐까 하는 것이죠.
이렇게 하면 여러가지 문제가 다 해결은 되는데 만약 그렇다면
"포인터를 넘기나 레퍼런스로 넘기나 실질적인 포퍼먼스에서 이득이 없겠네?"하는 생각이 들더군요.
또한 const int 로 파라미터를 넘기는거나 const int& 로 넘기는거나 포퍼먼스가 똑같겠네 하는 생각이 들더군요.
여기저기 돌아다녀는데 자료를 찾지 못해서
저혼자 상상에 나라를 펴칠게 되버렸네요 ㅡ.ㅡ;
잘하시는 분은 어셈으로 분석하시던데 전 아직 그 수준까지 못 되서... ^^;
Forums:
http://bbs.kldp.org/viewtopic.php?t=2440
http://bbs.kldp.org/viewtopic.php?t=24407
전에 제가한번 테스트 했던건데 참고하세요
---
http://coolengineer.com
그렇군요. 내부적으로는 포인터군요.궁금한게 한방에 날아가는 글이었습니
그렇군요. 내부적으로는 포인터군요.
궁금한게 한방에 날아가는 글이었습니다. ^^
답변 감사합니다.
댓글 달기