반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 전자소송
- Laravel
- blockchain
- win32
- Sentinel
- 소액임금체불
- Tutorial
- php
- 홈택스
- 코로나19
- 체당금
- Python
- vue
- auth
- 이더리움
- javascript
- as후기
- elasticSearch
- 당사자표시정정신청서
- Bootstrap
- 인민공원
- Java
- 보정명령
- cartalyst
- Eclipse
- 코로나
- 개인사업자
- Blade
- 사업자계좌
- reactnative
Archives
- Today
- Total
그냥 사는 이야기
Short-Circuit Evaluation에 대해서 본문
반응형
Short-Circuit Evaluation
은 &&
이나 ||
에서 첫번째 argument 에서 조건의 결과값에서 이미 전체 결과값이 판단되었을 경우 첫번째로만 수행하는 것을 말헙니다.
예를 들어,
BOOL condition1(int pValue)
{
printf("condition1() has been executed\n");
return 0 == pValue;
}
BOOL condition2(int pValue)
{
printf("condition2() has been executed\n");
return 0 == pValue;
}
int main()
{
int count1 = 1;
int count2 = 0;
if (condition1(count1) && condition2(count2))
{
printf("&& test\n");
}
count1 = 0;
if (condition1(count1) || condition2(count2))
{
printf("|| test\n");
}
}
첫번째 && 연산에서는 condition1 이 false 이므로 condition2() 까지는 수행 시키지 않습니다. 두번째 || 연산에서는 condition1 이 true 이므로 condition2() 까지는 수행 시키지 않습니다.
여기까지만 보면 그렇구나 싶긴 한데 문제가 될만한 것은 다음의 경우입니다.
static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags)
{
...
while (slabp->inuse < cachep->num && batchcount--) {
STATS_INC_ALLOCED(cachep);
STATS_INC_ACTIVE(cachep);
STATS_SET_HIGH(cachep);
ac->entry[ac->avail++] = slab_get_obj(cachep, slabp,
node);
}
check_slabp(cachep, slabp);
....
}
linux-2.6.24
의 커널 코드 중 일부입니다. while 문 안의 slabp->inuse < cachep->num
경우를 보면 && 연산자는 충분히 Short-Circuit Evaluation 를 할 수 있으며 따라서 2번째 조건인 batchcount--
를 수행하지 않을 수도 있습니다. 물론 리눅스 커널 코드야 저런 경우까지 고려해서 작성되었겠지만 Short-Circuit Evaluation 염두하지 않고 2번째 조건에 뭔가 연산을 일으키지 못한다면 흐름을 이해하지 못하게 될 것입니다.
정 헷갈리면 다 풀어서 해야 합니다.
'Development' 카테고리의 다른 글
주석의 재미 있는 활용 (0) | 2021.03.08 |
---|---|
토발즈의 더 좋은 코드 (0) | 2020.12.30 |
AWS EC2에서 MongoDB 설치 Setting (0) | 2019.08.18 |
Comments