매크로 함수란?

 

#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 처리 되는것이 성능에 유리합니다.




+ Recent posts