문제

Linux 커널 코드 에서이 2 개의 매크로를 발견했습니다. 분기의 경우 최적화를위한 컴파일러 (GCC) 지침임을 알고 있습니다. 내 질문은,이 매크로를 사용자 공간 코드에서 사용할 수 있습니까? 최적화를 줄까요? 모든 예는 매우 도움이됩니다.

도움이 되었습니까?

해결책

네, 그들은 할 수 있어요. Linux 커널에서, 그들은 다음과 같이 정의됩니다

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

__builtin_expect 매크로는 분기 예측을 사용하는 GCC 특정 매크로입니다. 그들은 프로세서가 조건이 사실인지 여부를 알려 주므로 프로세서가 분기의 올바른 "측면"에서 지침을 프리 페치 할 수 있습니다.

다른 컴파일러에 대한 컴파일을 보장하기 위해 IFDEF로 정의를 래핑해야합니다.

#ifdef __GNUC__
#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
#else
#define likely(x)       (x)
#define unlikely(x)     (x)
#endif

올바른 분기 예측에 사용하면 최적화를 제공합니다.

다른 팁

조사하십시오 모든 프로그래머가 기억에 대해 알아야 할 것 "6.2.2 레벨 1 명령 캐시 액세스 최적화" - 정확히 이에 대한 섹션이 있습니다.

가능성 () 및 가능성이 낮은 () 매크로는 커널 헤더에 정의 된 예쁜 이름입니다. ~이다 진짜 GCC 기능

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top