모두의 코드 커뮤니티

기본 자료형의 Call by const reference

안녕하세요.

함수 내에서 참조만 할 목적으로 기본 자료형을 parameter로 받는다고 가정하였을 때,

const reference로 call하는것이 도움이 될지 혹은 문제가 될지 궁금해서 여쭤봅니다.

감사합니다

1 Like

기본자료형이라 하면 int 나 double 같은 애들 말씀하시는 건가요? 얘들은 call by reference 나 value 로 전달할 때나 아무 차이 없습니다.

오히려 const-reference 로 전달하면 쓸데없이 포인터로 전달해서 indirection 이 한 번 더 늘어나게 되므로 (물론 이 부분은 컴파일러가 최적화를 할 수 도 있을 것 같습니다) value 로 전달하는 것이 나을것 같네요.

실제로 보면 O0 로 컴파일 했을 때 https://gcc.godbolt.org/z/93e-Zw 처럼 call by reference 가 dereference 를 위해서 한 번의 명령어를 더 수행합니다. (mov eax, DWORD PTR [rax] 부분)

물론 O2 로 컴파일 하면 둘 다 똑같은 어셈블리를 생성합니다. https://gcc.godbolt.org/z/rMdUsX

1 Like

제가 정확하지 않게 질문을 드렸는데, 질문의 의도를 완벽하게 이해하시고 답변을 주셔서 감사합니다.

기본 자료형은 char int double 등을 얘기하는 말이였습니다.

추가 질문이 있는데 Call by const reference는 8byte의 pointer를 이용하여 객체를 받아오니

8byte 이상의 크기를 갖는 객체를 함수의 parameter로 받을때 효과적인 방법인건가요 ?

1 Like

대개 맞습니다만, 때로는 8 바이트보다 큰 객체에 대해서 call by value 가 더 빠를 수 도 있습니다. 왜냐하면 dereference 역시 공짜는 아니거든요.

어떤 선택을 하던 performance critical 한 부분은 꼭 벤치마크를 돌려보는 것이 낫습니다.

1 Like

깊이 있는 내용과 그에 대한 간결한 설명에 항상 감탄합니다.

덕분에 오늘도 하나 배워갑니다.

감사합니다.