2025. 4. 18. 10:14ㆍProgramming Language/C++
이전에 함수를 만들면 해당 내용을 스택에 쌓고 비우는 과정, 추가로 이 함수가 어디로 부터 호출되었는지에 대한 정보를 저장해두는 것과같은 비용들이 발생한다고 했었는데 이런 비용 발생을 하지 않게 하는 방법으로 함수의 inline화라는 것이 있다.
함수의 인라인화
inline은 함수를 호출하지 않고, 함수 코드를 호출하는 곳에 복붙해버려라 라고 컴파일러에게 요청하는 키워드로 사용 방법은 함수의 정의 앞에 inline이라는 키워드를 붙여주면 된다.
inline int add(int a, int b) {
return a + b;
}
이렇게 inline화 된 함수의 경우는
int main() {
int c = add(1, 2);
}
이렇게 호출되었을때 이 함수로 가서 실행하는 것이 아니라 내부 코드 자체를 가져와서
int main() {
int c = 1 + 2; // add 함수 코드 자체가 복붙됨
}
이런식으로 변경되고 결과적으로 이 함수의 호출 자체가 사라진다고 볼 수 있다.
주의점
이 인라인화의 경우는 우리가 컴파일러에게 강제화할 수 있는 것이 아니라 컴파일러 한테 제안 하는 것이라서 컴파일러의 최적화 전략에 따라서 우리가 inline으로 붙인 함수가 인라인화가 되지 않을 수도 있다.
또한 함수가 복잡하고 내용이 많다면 우리가 이 inline화를 통해서 얻는 이점이 오히려 코드가 많아지는 결과를 만들어 실행 자체가 느려질 수 있기에 주의 해야한다.
또한 inline된 함수의 경우는 함수 호출 스택이 없기에 디버깅이 헷갈릴 수도 있다.
그렇기에 inline의 경우는 짧고 자주 호출되는 함수(호출 오버헤드 제거, 빠른실행)와 getter/setter 같이 단순한 함수(코드의 간결화, 최적화)에 사용하는 것이 좋다
추가로 비슷하게 전처리 지시자라는게 있으나 이는 나중에 알아보도록 하자
'Programming Language > C++' 카테고리의 다른 글
C++의 포인터 배열에 대해서 (0) | 2025.04.18 |
---|---|
Ch 10. 범위, 공간 - 01. 빌드 (0) | 2025.04.18 |
Ch 09. 함수 - 08. 함수 포인터 (0) | 2025.04.18 |
Ch 09. 함수 - 07. 함수 오버로딩 (0) | 2025.04.18 |
Ch 09. 함수 - 06. 디폴트 매개변수 (0) | 2025.04.18 |