반응형
함수의 인자를 레퍼런스로 주었을 때와 포인터로 주었을 때, 생성되는 asm 코드는 어떻게 다를 지 궁금했다.
매우 간단한 함수를 만들고, VS2008 에서 최적화 없이 asm 코드를 생성하여 비교하였다.
1. 소스
f1 은 레퍼런스도 포인터도 사용하지 않은 기본형을 그대로 인자로 준 함수. f2 는 모든 인자를 포인터로 넘긴 것, f3 은 레퍼런스로 인자를 넘긴 것이다. f2, f3 이 asm 으로 어떻게 해석되어 생성될 지 궁금했는데,
왼쪽이 f2 의 호출부분 (==== 바 위쪽) 과 f2 의 몸체. 오른쪽이 f3 의 호출부분과 몸체이다. asm 을 소스와 함께 생성했기 때문에, 비교하기 편리하고, 잘 살펴보면, 노랗게 다르다고 표시된 부분은 모두 원 소스 부분 뿐이다. 생성된 asm 코드 자체는 (호출하는 부분과 몸체 모두) 동일하다.
원래 이런 것인지 ( reference 는 포인터로 구현되는 것이고, 사람이 소스를 보기 편리하기 위한 장치일 뿐인지 ), 아니면, 코드가 단순해서 이런 결과가 나온 것인지 잘 모르겠다. 답을 아시는 분은 댓글 바란다.
728x90
'프로그래밍 > C-CPP' 카테고리의 다른 글
[번역] COM 자동 초기화 자동 클린업 (0) | 2016.01.12 |
---|---|
[SO번역] zlib: `deflate` 함수와 `compress` 함수의 차이점은 (1) | 2015.12.24 |
CPP/STL const map 객체에 [key] 접근시 에러 (1) | 2015.11.20 |
[번역] (dll) __stdcall 함수와 GetProcAddress (0) | 2011.07.12 |
[TIP] cl 로 .pdb 만들기 (0) | 2011.01.26 |