2010-01-02 4 views
7

동적으로로드 된 라이브러리에 대해 플랫폼 독립적 인 래퍼를 구현하는 중입니다. 물론 라이브러리에서 함수를로드 할 때 나중에 사용할 수 있도록 포인터로 저장할 필요가 있습니다. boost :: :: 함수를 사용하여 정상적인 함수 포인터 대신 생각했다. 물론, 컴파일 시간이 늘어날 것이지만, 그것이 내가 두려워하는 것이 아닙니다. 오히려 : 오버 헤드 부스트 :: 기능에 의해 도입 무엇boost :: function 런타임 성능

는 저장 기능를 호출 할 때? 하나 있습니까? 얼마나 큰가요?

때때로 이러한 함수를 호출 할 때 오버 헤드가 많이 발생하지 않을 것이라고 생각합니다. 그러나 많이 호출되는 함수는 어떻습니까? (극단적 인 예 :로드 된 GL 라이브러리에 glVertex). 얼마나 성능에 좋을까요?

소스 다이빙 부스트가별로 대답하지 않았습니다.>.

또한 컴파일러에 따라 다르면 주로 GCC와 MSVC에 관심이 있습니다.

+0

답변은 : perf를 많이 해칠 것이고, 사용하지 마십시오. – user1095108

답변

5

다양한 기능 래퍼 구현에 대한 설명과 비교를 위해 here을 살펴보십시오.

+0

이것은 참으로 흥미로운 비교입니다! –

+1

이 기사는 2007 년 출간되었습니다 - 여전히 관련이 있습니까? – Adrian

+0

흠, 0x의 내용으로 인해 오래되었을 수도 있습니다 ... –

5

부스트 documentation에서 설명한 것처럼 boost::function을 호출하면 대부분의 경우 함수 포인터를 통해 한 번의 호출 비용이 발생합니다. 즉, 함수 포인터를 사용해야하는 경우라면, 그것은 씻음이며, 많은 기능을 무료로 사용할 수 있습니다.

1

boost :: function은 tr1로 만들었으므로 현대 컴파일러에서는 std :: tr1 :: function이고, 에있는 std :: function은 실제로 최신 컴파일러입니다.

어떤 경우에도 관찰 한 것처럼 std :: function에는 생성에 대한 오버 헤드가 0이 아닙니다 (개체의 복사본 생성 포함). 이론 상으로는 호출을위한 원시 함수 포인터와 동일한 오버 헤드를 가져야합니다. 즉, 간접적 인 수준이 있지만 실제로는 스마트 컴파일러가 간접적 인 수준을 인라인 할 수 있습니다.

물론 함수 포인터에 저장하거나 저장할 수없는 std :: function에 저장할 수있는 것들이 있습니다.

관련 문제