초보 코린이의 성장 일지

인라인(Inline) 함수 본문

C++

인라인(Inline) 함수

코오린이 2023. 1. 8. 21:15

인라인 함수

- 프로그램의 실행 속도를 높이기 위해 C++에 새로 보강된 함수


함수 호출 프로그램 내부 구조

작성한 코드 프로그램을 실행 -> 명령들을 컴퓨터 메모리에 로드 -> 로드된 명령들은 각각 하나의 특정 메모리 구조를 갖는다 -> 명령어들을 순차적으로 실행 -> 루프나 분기문을 만나면 특정 주소로 명령을 건너뛴다 ->

함수 호출 명령을 수행 -> 함수 호출 명령에 도달 하고 그 다음에 있는 명령의 주소를 메모리(스택)에 저장 -> 스택에 매개변수를 복사한 후, 그 함수가 시작되는 메모리 위치로 이동 -> 함수 실행

 

함수 리턴 과정

함수가 종료 -> 함수의 리턴 값을 임시 저장소에 저장 -> 스택에서 호출시점으로 가서 주소 값을 꺼내옴 -> 호출된 시점으로 복귀


인라인 함수의 필요성

장점

- 위에 있는 과정을 해결하기 위해 대안을 제공

- 인라인 함수에서는 컴파일된 함수코드가 프로그램의 다른 코드 안에 직업 삽입되어 있다.

- 컴파일러가 함수 호출을 그에 대응하는 함수 코드로 대체한다는 의미

- 함수를 수행할 때 이동하지 않고 그 자리에서 처리하므로 일반적인 함수 수행 능력보다 빠르다.

 

단점

- 메모리 사용 측면에서는 인라인 함수가 일반 함수보다 좋지 않다.

- 여러번 인라인 함수를 호출한다면 프로그램은 그 함수의 사본을 프로그램의 코드안에 계속 부른만큼 삽입

- 함수 코드가 길면 무의미하며, 짧을때 사용해야한다.  

 

번외

- 사용자가 인라인 함수를 사용해도 컴파일러가 자기판단 하에 사용하거나 제거해버린다.

- 사용자가 임의로 인라인을 붙인다고 하여도 의도적으로 행동한다고 보장 할 수 없다.

- 인라인 함수는 재귀 호출이 허용되지 않는다.

 

인라인 사용 이유

ODR규칙 = 선언을 여러번 가능하나 정의는 반드시 한 번만 해야한다. 일반함수는 규칙 위반

- 일반적인 함수는 헤더에는 선언가능 Cpp에서 정의가 일반적

- 일반적인 함수는 헤더에서 정의는 불가능 Cpp 정의, 선언 가능

- 하지만 인라인이 붙은 함수는 헤더에서 정의가 가능


 

'C++' 카테고리의 다른 글

ODR (One Definition Rule) - 유일 정의 규칙  (0) 2023.01.08
함수원형과 포인터 및 Const 사용  (0) 2023.01.08
Comments