성능은 100% 동일합니다. 그리고 위 익명분의 헛소리는 무시하셔도 됩니다. C++은 성능이 중요한 어플리케이션을 짜기에 충분히 적합한 언어입니다.
두 함수는 컴파일시의 문법적인 요소만 다르며 컴파일을 마치고 나면 동일합니다.
한가지 달라질 수 있는 가능성은, namespace에 선언된 함수는 inline 키워드를 따로 쓰지 않으면 인라인 최적화가 안되지만 클래스의 선언에 함수 정의가 포함된 경우에는 inline 키워드를 쓰지 않아도 암묵적으로 inline 키워드를 쓴 것과 동일한 효과를 나타내기 때문에 인라인여부에 따라서 성능이 달라질 수는 있습니다.
표준의 inline과 확장 __forceinline은 의미가 다릅니다.
표준의 inline은 힌트에 불과합니다. 결국 인라이닝을 하고 안하고는 컴파일러 맘입니다.
표준에서 함수의 인라이닝을 강제하는 방법은 없습니다.
제가 동일하다고 말해버리고나서 '달라질 수 있는 가능성'으로 따로 언급한 이유입니다.
성능 신경 쓰면 asm이나 c쓰지 느린 cpp는 왜
성능 신경 쓰면 asm이나 c쓰지 느린 cpp는 왜 씁니까?
익명
a
성능은 100% 동일합니다. 그리고 위 익명분의
성능은 100% 동일합니다. 그리고 위 익명분의 헛소리는 무시하셔도 됩니다. C++은 성능이 중요한 어플리케이션을 짜기에 충분히 적합한 언어입니다.
두 함수는 컴파일시의 문법적인 요소만 다르며 컴파일을 마치고 나면 동일합니다.
한가지 달라질 수 있는 가능성은, namespace에 선언된 함수는 inline 키워드를 따로 쓰지 않으면 인라인 최적화가 안되지만 클래스의 선언에 함수 정의가 포함된 경우에는 inline 키워드를 쓰지 않아도 암묵적으로 inline 키워드를 쓴 것과 동일한 효과를 나타내기 때문에 인라인여부에 따라서 성능이 달라질 수는 있습니다.
오오오!!!
오... 정말 대박 답변 감사합니다.
인라인의 차이가 있었군요....
그럼 namespace에 있는 함수들도 __forceinline 해주면 동일해지겠군요..
클래스 선언의 암묵적 인라인을 미처 생각못했네요..
감사합니다....
표준의 inline과 확장 __forceinline은
표준의 inline과 확장 __forceinline은 의미가 다릅니다.
표준의 inline은 힌트에 불과합니다. 결국 인라이닝을 하고 안하고는 컴파일러 맘입니다.
표준에서 함수의 인라이닝을 강제하는 방법은 없습니다.
제가 동일하다고 말해버리고나서 '달라질 수 있는 가능성'으로 따로 언급한 이유입니다.
__forceinline은 컴파일러(__forceinline이 MSVC확장이던가요?)에게 인라인하라고 강제하는 겁니다.
말씀과 달리 100% 동일할 수 없는 이유를 아래에
말씀과 달리 100% 동일할 수 없는 이유를 아래에 잘 설명하셨네요.
그리고 충분하다는 건 어디에서 쓰느냐에 따라 다른 말이죠.
질문자님께 말씀드리자면 많이 나봤자 몇 클럭 차이나는 코드보고 속도 따지려면 C++보다는 asm을 파고드시고, C++에서는 설계에나 집중하세요.
나중에 virtual 키워드 배우고나면 느려서 어따 써먹겠냐고 할까봐 겁나네요.
댓글 달기