프로그램이 중단 될 때까지 힙 공간 청크를 반복하는 코드가 있습니다.두 개의 포인터를 논리적으로 AND를 사용하여 프로그램 중단까지 루프
논리 AND (값이 참)가 관계 연산자의 조건을 어떻게 충족시키는 지 이해할 수 없습니다. 루프는 힙이 끝날 때까지 주소를 적절하게 증가 시키지만 비교는 나에게 의미가 없습니다. 이 조작은 무엇을 의미합니까?
프로그램이 중단 될 때까지 힙 공간 청크를 반복하는 코드가 있습니다.두 개의 포인터를 논리적으로 AND를 사용하여 프로그램 중단까지 루프
논리 AND (값이 참)가 관계 연산자의 조건을 어떻게 충족시키는 지 이해할 수 없습니다. 루프는 힙이 끝날 때까지 주소를 적절하게 증가 시키지만 비교는 나에게 의미가 없습니다. 이 조작은 무엇을 의미합니까?
연산자 우선 순위를 올바르게 파싱하지 않습니다.
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;
}
}
참고, 나는 컴파일러가 어쨌든 그 체크를 꺼내기를 기대한다. –
그래서 당신이 이해하지 못하는 연산자와 연산자에 대해 어떻게 알게 되었습니까? 그것은 멀리 간단한 검색입니다. – Olaf
당신이 무엇을 요구하고 있는지, 특히이 부분은 "논리적 AND (true 값을 가짐)"입니다. 당신이 혼동 한'&&'전에'블록'입니까? – yano
아니요, 항상 true 값을 가지고 있지 않습니다 - http://en.cppreference.com/w/c/language/operator_precedence – OldProgrammer