2017-02-09 56 views
2

나는 Visual Studio에서 Windows에서 first tutorial of ROS을 할 노력하고있어 2015식별자는 "__builtin_expect"(승리 튜토리얼 - 토커 예에 ROS 중) 정의되지는

먼저 나는 새로운 WIN 32 콘솔 응용 프로그램을 작성하고 복사 코드는 here입니다. 그런 다음이 가이드에서 설명한대로 프로젝트를 구성했습니다. 디버깅이 몇 가지 오류를했다 동안 :

  • 식별자 "__builtin_expect"(내 프로그램의 이름입니다) 파일 service_client.hTestTalker.cpp에 정의되어 있지 않습니다.
  • 하지 오픈 소스 파일 "SYS/time.h는"

wiki.ros.org 실행에서 SDK, 나는 그것을 테스트 할 수 있습니다. 나는 무엇이 잘못되었는지 전혀 모른다. 누군가 나를 도울 수 있기를 바랍니다.

미리 감사드립니다.

답변

1

__builtin_expectGCC입니다. Visual Studio에서는 제공하지 않습니다.

CPU 분기 예측을 최적화하기 위해 컴파일러에 힌트를 제공하기 때문에 __builtin_expect(expr, c)의 모든 인스턴스를 expr으로 바꿀 수 있습니다.

또는 맞는 경우 this answer에 설명 된대로 __assume을 대신 사용하십시오.

+0

이것은 다릅니다 :'__builtin_expect'는 힌트가 잘못되었을 때'__assume'이 UB로가는 반면,'__builtin_expect'는 표현식이 가장 자주 또는 더 자주 참일 것이라는 힌트를 컴파일러에 제공합니다. ['__assume' doc] (https://msdn.microsoft.com/en-us/library/1b3fsfxw%28VS.80%29.aspx)에서 : "_ 컴파일러가'__assume'에 기초한 코드를 생성하기 때문에, 그 코드는 실행시에'__assume' 명령문 내부의 표현식이 거짓이면 올바르게 실행되지 않습니다 ._ – YSC

+0

'#define __builtin_expect (x, y)'를 제안하고 최적화 및 분기 예측을 수행하도록합니다. 관련 : [알려진보다 일반적인 경로에 대한 분기 최적화] (http://stackoverflow.com/q/35938249/5470596). – YSC

+0

@YSC 식별자의 이중 밑줄은 구현을 위해 예약되어 있습니다. – jotik