2016-10-28 11 views
-2

프로그램이 중단 될 때까지 힙 공간 청크를 반복하는 코드가 있습니다.두 개의 포인터를 논리적으로 AND를 사용하여 프로그램 중단까지 루프

논리 AND (값이 참)가 관계 ​​연산자의 조건을 어떻게 충족시키는 지 이해할 수 없습니다. 루프는 힙이 끝날 때까지 주소를 적절하게 증가 시키지만 비교는 나에게 의미가 없습니다. 이 조작은 무엇을 의미합니까?

+1

그래서 당신이 이해하지 못하는 연산자와 연산자에 대해 어떻게 알게 되었습니까? 그것은 멀리 간단한 검색입니다. – Olaf

+0

당신이 무엇을 요구하고 있는지, 특히이 부분은 "논리적 AND (true 값을 가짐)"입니다. 당신이 혼동 한'&&'전에'블록'입니까? – yano

+0

아니요, 항상 true 값을 가지고 있지 않습니다 - http://en.cppreference.com/w/c/language/operator_precedence – OldProgrammer

답변

2

연산자 우선 순위를 올바르게 파싱하지 않습니다.

block&&block < (size_t*)sbrk(0) 

&&<는보다 높은 우선 순위를 갖는다

block && (block < (size_t*)sbrk(0)) 

때문에 동일하다.

그래서 block이 널 포인터가 아닌지 먼저 확인한 다음 sbrk(0)보다 작은 지 확인합니다.

루프를 통해 매번 null을 확인하는 것은 실제로 필요하지 않습니다. 루프 내의 계산으로 인해 null 포인터가 생길 수 없기 때문입니다. 그래서 이것은 다음과 같이 쓸 수 있습니다 :

if (block) { 
    while (block < (size_t*)sbrk(0)) { 
     block = current chunk + next chunk; 
    } 
} 
+1

참고, 나는 컴파일러가 어쨌든 그 체크를 꺼내기를 기대한다. –