티스토리 뷰
피할수 없는 if 문의 분기라면, 하지만 그 결과가 항상(거의) 참 혹은 거짓이라면..? 이때 사용할 수 있는게 likely, unlikely 명령어 입니다.
아래와 같이 내부적으로 gcc의 builtin 함수로 define되어 있습니다.
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
사용 예를 보면,void* p = malloc(128);
if (p==NULL)
here();
보통 위와 같은 코딩을 하지만, 사실 p가 NULL인 경우는 극히 드문데요, 이러한 경우 cpu에게 p가 대부분 false일 것이라고 알려주는 unlikely로 대체할 수 있는데 아래와 같습니다.
void* p = malloc(128);
if (unlikely(p==NULL))
here();
혹은 builtin 함수 그대로 사용도 가능합니다.void* p = malloc(128);
if (__builtin_expect(p==NULL,0))
here();
편한 함수를 사용하도록 합시다, 성능 개선에 좋다니까, (성능적인 측면에서 좋은것은, CPU는 명령어 수십개를 병렬로 처리하고, 분기에 대해 임의로 선택하여 수행됩니다. 그리고 그 선택이 옳지 못한 경우 다시 분기로 돌아오게 되는데, 이러한 잘못된 수행을 회피할 수 있다는 점입니다.)
'개발 > Linux' 카테고리의 다른 글
UTC (Universal Time Coordinated) (0) | 2012.03.13 |
---|---|
file_operations - compat_ioctl() (0) | 2012.03.07 |
실제 사용 가능한 메모리 사이즈 (+ /proc/meminfo Explained Link) (0) | 2011.12.22 |
데이터 종류에 따른 메모리 영역 (0) | 2011.12.22 |
gdb 옵션 (0) | 2011.12.20 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday