2
위키 백과에서 순환 버퍼의 사용 가능한 공간을 확인하려면 모듈로 연산이 필요합니다. 그러나 내 구현 단순히 수행모듈로 연산을 사용하지 않는 순환 버퍼
static size_t bytes_used(const ringbuffer* rb)
{
int d = rb->writer - rb->reader;
if (d >= 0) return d;
return rb->size - abs(d);
}
static size_t bytes_free(const ringbuffer* rb)
{
return rb->size - (bytes_used(rb) + 1);
}
내가 내려다 보이는 해요 뭔가가 있나요, 또는 방법은이 경우 필요하지 와서?
당신의 말을 이해하려고합니다. 위의 코드가 작동하지 않는 숫자를 주시겠습니까? 아니면 제수의 2 배를 넘지 않는 숫자를 정확히 의미합니까? – Muis
@ Joshua 'A mod D'를 계산하는 것을 고려하십시오. 'A'가'2 * D'보다 엄격히 적다는 것을 안다면'A'와'D'를 비교할 수 있고, 더 큰 경우'D'를 한 번 뺀 결과를 얻을 수 있습니다. A
dasblinkenlight