매크로 함수란?
#include <iostream>
#define SQUARE(x) (x * x)
int main()
{
std::cout << SQUARE(3);
}
- 매크로 함수는 전처리 단계에서 호출부가 정의한 형식 그대로 치환됩니다. 그렇기 때문에 함수 호출로 인한 추가적인 명령어 처리가 없기 때문에 성능상 이점이 있을 수 있습니다.
매크로 함수의 단점
#include <iostream>
#define SQUARE(x) (x * x)
int main()
{
std::cout << SQUARE(++3);
std::cout << SQUARE("ASDF");
}
- 매크로 함수는 인자로 전달된 형태 그대로 치환하고 데이터 타입을 지정할 수 없기 때문에 사용자가 의도하지 않은 결과가 return 될 수 있습니다.
inline 함수란?
#include <iostream>
inline int SQUARE(int x) {
return x * x;
}
int main()
{
std::cout << SQUARE(10);
}
- 매크로 함수를 이용한 함수의 인라인화는 전처리기에 의해서 처리되지만, inline 키워드를 통해 함수를 정의할 경우 컴파일러에 의해서 인라인 처리가 됩니다. 덕분에 데이터 타입을 지정할 수 있고 매크로 함수처럼 형태 그대로 치환되는 형식이 아니기 때문에 매크로 함수보다 이점이 있습니다.
inline 함수의 단점
- inline 키워드를 사용한다고 해서 무조건적으로 inline 처리가 되지 않습니다. 컴파일러 판단에 의해서 inline에 이점이 있을 때 inline 처리가 됩니다.
- 만약, 무조건적으로 inline 처리가 된다 하면 메모리 사용량이 증가되어 관리해야할 페이지 개수가 늘어나고 명령어 캐시 hit율이 떨어지기 때문에 성능이 오히려 떨어질 수 있습니다. 그렇기 때문에 코드양이 적은 함수만이 inline 처리 되는것이 성능에 유리합니다.
'Programming Language > C, C++' 카테고리의 다른 글
상속 관계에서 호출할 부모 생성자를 지정하는 방법 (0) | 2023.01.27 |
---|---|
const 멤버 함수 (0) | 2023.01.27 |
C/C++ volatile 키워드의 역할 (0) | 2022.11.02 |
#define, typedef, using 사용법과 차이 (0) | 2022.10.22 |
'if-else'문과 'switch-case'의 차이점 (0) | 2022.10.10 |