본문 바로가기

복습/C++

[C++] 복습일지 inline함수 그리고 virtual

안녕하세요 

오늘은 inline 함수에 대하여 공부해서 적어보도록 하겠습니다.


일반 함수와 인라인함수의 가장 큰 차이가 무엇일까요?


프로그래머가 어떻게 코드를 짯느냐가 아니라, 


C++ 컴파일러가 코드를 프로그램에 어떻게 결합하느냐 입니다.



[일반함수의 호출과정]


→ 함수호출 

→ 함수호출명령 다음의 명령의 주소를 메모리에 저장

→ 스택에 매개변수 복사

→ 함수가 시작되는 메모리 위치로 점프

→ 함수실행

→ 함수의 return값을 레지스터에 복사

→ 저장해두었던 주소의 명령으로 돌아옴


[인라인함수의 호출과정]


→ 컴파일 된 함수코드

→ 프로그램의 다른 코드 안에 직접 삽입


그렇다면 당연히 속도는 인라인함수가 약간 빠르게 진행됩니다

그러나 메모리 측면에서는 그렇지 않습니다.

왜냐하면 예를들어 인라인함수를 10번 호출을 한다면,

인라인함수의 복사본이 10번이나 삽입이 되기 때문입니다.


virtual, 가상함수에대해서는 inline함수가 가능할까요?


생각을 한번 해본다면

'inline함수는 컴파일시점에 프로그램의 코드를 삽입' 입니다.


이말인 즉슨, 컴파일타임에 결정이 되는 것입니다.


virtual은 가상함수포인터를 통해 주소를 따라가는데 inline함수는 코드에 삽입되어서

주소를 가지지 않습니다.


꼭 같이 쓰면 안되는건 아니지만 가급적 virtual과 inline은 같이 쓰지 않는게 좋습니다.