인라인 함수의 탄생
프로그램의 실행 속도를 높이기 위해 C++에서 보강되었습니다.
일반 함수와의 차이점을 알려면 일반적인 함수의 호출을 알아야 합니다.
일반적인 함수의 호출:프로그램을 함수의 주소로 점프시켰다가 함수가 끝나면 원래의 자리로 돌아옵니다.
좀 더 자세하게 설명하면
- 함수 호출 명령 도달
- 함수 호출 명령 다음에 있는 명령주소를 메모리에 저장
- 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프
- 코드 수행
- 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴
※이 때문에 시간이 많이 걸림(점프 수행, 점프할 위치 기억)
인라인 함수의 특징
함수호출을 그에 대한 함수 코드로 대체합니다.
위의 사진처럼 인라인 함수 호출부분이 함수 코드로 대체가 됩니다. 그래서 점프할 위치 기억, 점프 수행을 할 필요가 없으므로 수행 속도는 일반 함수보다 약간 더 빠릅니다.
대신 단점이 있습니다. 10번 호출하면 그만큼 함수코드로 대체하니 메모리 사용 측면에서는 인라인 함수가 더 안 좋습니다.
(하지만 한 번 호출했을 때는 일반 함수나 인라인 함수나 메모리 사용량에서는 차이가 없다.)
인라인 함수의 사용방법
함수의 정의나 선언 앞에 inline이라는 키워드를 붙여주면 됩니다.
다만 클래스 메서드 같은 경우, 메서드 선언부에 정의를 하면 inline화 됩니다.
주의해야 할 점
-
inline 선언을 해도 컴파일러가 거부할 수 있다.
-
inline 선언을 안 해도 컴파일러가 inline처리를 할 수 있다.
-
함수가 재귀 거나 덩치가 크면 inline 선언을 거부하는 컴파일러도 있다.
-
함수가 작고 자주 호출되는 함수가 아니라면 시간 절약은 크지 않다.
visual studio 프로젝트 설정에는 명시적으로 inline으로 선언해주면 반드시 인라인 함수로 만드는 옵션이 있습니다.
댓글