CPP에서 DEFINE 함수 속도가 더 빠르지 않나요?

  • moon1288
    moon1288

    https://algospot.com/judge/problem/read/CLOCKSYNC

    위 문제를 풀고 있습니다.

    풀이가 잘 안되어서 검색을 해서 다시 풀어보는데

    최소값을 비교할 때

    #define MIN(a,b) ((a)<(b) ? (a):(b))

    위와같이 사용하였더니 시간초과가 나고

    int MIN(int a, int b) { return a>b ? b : a; }

    이렇게 대체했더니 답이 빠르게 나왔습니다.

    제가 알기로는 define이 더 빠른걸로 아는데 왜 이런결과가

    나온걸까요?

    참고한 답은 아래와 같습니다.

    https://github.com/Yukariko/algospot/blob/master/CLOCKSYNC.cpp

    감사합니다.


    4년 전
4개의 댓글이 있습니다.
  • Being
    Being

    define이 더 빠를 이유는 별로 없습니다. 저렇게 정말 단순한 경우는 컴파일러가 최적화하는 건 마찬가지라 똑같고요, 전처리 매크로를 쓰면 경우에 따라서는 오히려 더 느리거나/답이 틀릴 수도 있죠. 예를 들어,

    MIN(slow_function(), another_slow_function());
    

    와 같이 하면, 매크로를 사용하면 어떻게 되는지 생각해보시기 바랍니다.


    4년 전 link
  • moon1288
    moon1288

    답변 감사드립니다.

    define과 function이 동작하는 방식이 완전 다른건가요?

    제가 관련 지식이 잘 없어 알아보려 해도

    어떻게 검색해야 할지 잘 모르겠습니다. 링크라도 부탁드립니다 ㅜㅜ


    4년 전 link
  • Being
    Being

    네 그렇습니다. #define은 전처리기(Preprocessor; https://en.wikipedia.org/wiki/C_preprocessor)로 컴파일이 이루어지기 전에 파일의 내용을 조작하는 역할을 합니다. 예를 들어, 위의 코드의 경우:

    ((slow_function()) < (another_slow_function()) ? (slow_function()) : (another_slow_function()));
    

    과 같이 변환됩니다. 컴파일은 이 이후에 발생합니다.


    4년 전 link
  • moon1288
    moon1288

    @Being 정말 이해가 잘 되었습니다. 여러번 호출하게 되어 훨씬 느려지겠네요. 감사합니다 :)


    4년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.