본문 바로가기

프로그래밍/C-CPP

[CPP] 포인터인자와 레퍼런스인자 함수 생성 asm 비교.

반응형
함수의 인자를 레퍼런스로 주었을 때와 포인터로 주었을 때, 생성되는 asm 코드는 어떻게 다를 지 궁금했다.

매우 간단한 함수를 만들고, VS2008 에서 최적화 없이 asm 코드를 생성하여 비교하였다.

1. 소스


f1 은 레퍼런스도 포인터도 사용하지 않은 기본형을 그대로 인자로 준 함수. f2 는 모든 인자를 포인터로 넘긴 것, f3 은 레퍼런스로 인자를 넘긴 것이다. f2, f3 이 asm 으로 어떻게 해석되어 생성될 지 궁금했는데,



왼쪽이 f2 의 호출부분 (==== 바 위쪽) 과 f2 의 몸체. 오른쪽이 f3 의 호출부분과 몸체이다. asm 을 소스와 함께 생성했기 때문에, 비교하기 편리하고, 잘 살펴보면, 노랗게 다르다고 표시된 부분은 모두 원 소스 부분 뿐이다. 생성된 asm 코드 자체는 (호출하는 부분과 몸체 모두) 동일하다.


원래 이런 것인지 ( reference 는 포인터로 구현되는 것이고, 사람이 소스를 보기 편리하기 위한 장치일 뿐인지 ), 아니면, 코드가 단순해서 이런 결과가 나온 것인지 잘 모르겠다. 답을 아시는 분은 댓글 바란다.

728x90