인라인 함수
함수를 호출하는 코드를 함수의 몸체로 치환하는식으로 동작한다.
인라인 함수가 될지 안될지는 컴파일러 마음이다.
매크로 함수의 장점.
1. 단순 치환이므로 빠르다.
2. 메모리 공간을 차지하지않는다.
3. 다양한 타입을 인자로 받을 수 있다.
매크로 함수의 단점.
1. 복잡한 함수를 만들기 어렵다.(역슬래쉬로 개행)
2. 디버깅이 불가능하다.
인라인 함수의 장점
1. 단순 치환이므로 빠르다.
2. 메모리 공간을 차지하지않는다.
3. 디버깅이 가능하다.
4. 타입을 인식하기 때문에 실수할 일이 적어짐.
5. 복잡한 함수를 만들기 용이하다. (그냥 함수랑 똑같이 작성하면 됨)
인라인 함수의 단점.
1. 호출되는 곳마다 함수의 본체가 삽입되므로 실행파일의 크기가 커진다.
인라인 함수가 일반함수가 되는 경우
1. 함수 포인터로 인라인 함수를 받는 경우
-> 인라인 함수는 코드영역에 올라가지 않는다. 함수포인터로 받는다는 것은
함수의 주소를 받는 것이니까 인라인 함수로는 불가능하다.
2. 재귀함수 형식으로 작성할경우
->단순 치환인 인라인 함수로는 재귀함수 구현이 불가능하다.
재귀호출은 함수의 호출 스택을 통해 구현되기 때문이다.
인라인함수는 실제로 호출되는게 아니라 삽입 될 뿐.
3. 컴파일러 마음.
C++ 에서는 매크로 함수보다는 인라인 함수를 쓸 것을 권장한다.
다만 매크로는 매크로만의 장점이 있다.
#define ARSIZE(ar) (sizeof(ar)/sizeof(ar[0]))
배열의 크기를 계산하는 매크로인데 배열 자체를 함수의 인수로 넘길 수 없기 때문에
인라인 함수로는 이런 동작을 구현할 수 없다. 매크로 함수의 단순 무식함만이
이런 함수를 허용한다.
인라인함수를 쓰는 이유
함수의 동작이 복잡하고 길이가 길다면 함수의 호출 시간은 얼마든지 무시할 수 있을 것이다.
하지만 예를들어 rand()%n이라는 간단한 연산을 위해 이런 복잡한 호출 절차를 거쳐야 한다는 것은
큰 부담이 아닐 수 없는데
함수의 실행에 걸리는 시간보다 호출에 걸리는 시간의 비율이 너무 크기 때문이다.
'C++' 카테고리의 다른 글
STL - vector (0) | 2020.10.27 |
---|---|
STL (0) | 2020.10.27 |
탬플릿 (0) | 2020.10.27 |
타입 캐스팅 (0) | 2020.10.27 |
비트연산으로 flag주기 (0) | 2020.10.27 |