인라인 함수

보물창고·2022년 3월 12일
0

1. 인라인 함수 => 치환

설정

: 인라인 함수의 치환을 적용하려면 프로젝트 설정을 해야함.

//참고
http://insidecoding.blogspot.com/2015/10/inline-function.html

  • 설정 하지 않으면,

  • 설정하면, call되지 않고, 치환 처리 되는 것을 확인할 수 있음.

위의 결과를 보고 생각을 해보면, 인라인 함수를 사용할 경우, 기계어 단계에서 3줄로
처리되는 것을 확인할 수 있음. 함수 호출보다 2줄이 절약됨.
하지만, 인라인함수 정의가 길다면, 치환되는 코드양이 많아지므로, 컴파일 후에
생성되는 코드양이 많아질 수 있음.
-> 이를 통해 작은 양의 코드만 인라인 처리해야 함을 파악할 수 있음.

인라인 함수와 함수 포인터

: 함수포인터는 일단 변수, 즉 실행시간에 사용될 함수를 고름.
하지만, 인라인 함수는 컴파일 시에 코드에 치환 되는 것임.

  • 결과
    따라서 함수포인터에 인라인 함수를 넣더라도 치환을 되지 않음.
    함수 포인터의 형식과 inline 함수의 경우 형식이 다름.
  • 예시

    -> 함수 포인터에 인라인을 넣었지만, 함수가 call 되는 것을 확인할 수 있음.

인라인과 링크

깨알팁

  • 링커가 함수의 주소를 찾는 일을 함.
  • 컴파일 시, 파일은 따로 따로 진행하지만,
    링크 과정에서 연결된 cpp와 헤더를 결합하는 과정을 함.
  • 인라인 함수를 헤더와 cpp로 분리할 경우, 생기는 문제에 대해서.

인라인 함수는 헤더 파일에서 정의를 구현하자!


-> 왜 링크에러가 발생했냐면?
: 컴파일 시점에서 Add.h에 선언된 인라인 Add2를 치환하는데, 치환한 값이 선언부이므로 링크에러가 발생함.

그런데 왜 일반 함수인 Add1은 문제가 되지 않냐면? 컴파일 과정에서 Call 기계어로 변환된 후, 링크 과정에서 Add1의 함수주소를 찾아나서게 되므로 함수 호출의 경우는 문제가 없음!

profile
🔥🔥🔥

0개의 댓글