- 그냥 함수는 호출 시점마다 함수 호출 과정을 거칩니다. 함수가 많이 호출되면 그만큼 속도도 현저하게 느려지는 오버헤드 현상이 발생합니다.
- 위의 단점을 보안하기 위해 나온것이 inline함수입니다. inline 함수는 컴파일 단계에서 처리가 진행 됨으로, 해당 inline 함수를 호출하는것은 미리 바로 리턴값이 호출되게 변환시켜둡니다.
장점 :
함수 호출 오버헤드가 발생하지 않습니다.
단점 :
1. 실행 코드가 길어집니다.
2. 구현이 길어지면 컴파일러가 일반 함수로 취급합니다.
3. 인라인 함수를 자주 사용하면 같은 코드 중복으로 바이너리 실행 파일이 커집니다.
4. 인라인 함수가 변경되면 전체 코드가 변경사항을 반영해야함으로, 컴파일 시간 오버헤드가 발생합니다.
결론 : 그냥 함수들은 주소값을 이용해서 호출하지만, 인라인 함수는 컴파일 단계에서 미리 main() 함수안에서 써둔것과 같은 효과를 얻습니다.
#include<iostream>
inline int fnc_1(int a, int b){
return a + b;
}
int main(void){
int num;
//num = fnc_1(5, 1);
num = 5 + 1; //이렇게 변환되어 컴파일이 됩니다.
return 0;
}
* 함수 호출 과정
함수 호출 -> 해당 시점에서 주소 값과 매개변 스택에 저장 -> 함수 실행
* 함수 리턴 과정
함수 종료 -> 함수 리턴값 임시 저장소에 저장 -> 스택에서 함수 주소값 꺼냄 -> 호출된 시점으로 복귀
'C++' 카테고리의 다른 글
[C++] 함수 포인터 vs std::function (0) | 2024.12.15 |
---|---|
[C++] 데이터 영역과 BSS영역 (0) | 2024.12.13 |
[C++] 버퍼와 플러시 (0) | 2024.10.23 |
[C++] map 몰랐던 사실(나만) (0) | 2024.10.19 |
[C++] 전역변수와 지역변수 (0) | 2024.10.19 |