2012-07-30 6 views
3

이 함수는 다음과 같습니다. void doSomething(unsigned char buff[50]); 내 함수에서 수행하고 싶은 것은 buff가 모두 null인지 빠르게 판단합니다. 루프 또는 루프가없는 큰 블록의 메모리

이 바이트에 어떤 는 비트의 결과를 야기 이후, 나는 단지 또는 버퍼를 비트 AND 결과가 0 인 경우 확인할 수 있습니다 생각하는 것을 위해 또는 1. 할 수합니다 결과가 0이면 배열의 모든 바이트가 0임을 나타냅니다.

전체 버퍼를 루핑하지 않고 C에서이 작업을 수행하는 쉬운 방법이 있습니까? 크로스 플랫폼이라면 좋을 것입니다.

+0

나는 당신이 무엇을 제안하고 있는지 정확히 모르겠다 - 당신은 어떻게 비트 식으로 또는 버퍼링을 통해 루핑하지 않을 것인가? –

+0

가능한 [C에서 모두 제로 버퍼를 확인하는 빠른 접근법]의 복제본? (http://stackoverflow.com/questions/1493936/faster-approach-to-checking-for-an-all-zero-buffer- in-c) – jweyrich

답변

2

아니요. 그러나 검사를 수행하기 전에 32 비트 또는 64 비트 유형으로 변환하여 반복 횟수를 줄일 수 있습니다. 마지막 16 비트를 올바르게 처리하십시오.

+0

또한 정렬 문제를 올바르게 처리해야합니다. –

0

나는 응답의 일부가 버퍼의 길이에 달려 있다고 생각한다.

버퍼가 50 바이트 길이 인 경우 (즉, 길이가 매우 짧고 길이가 컴파일 타임에 알려짐) 예, 비트 OR (및 Ignacio가 다른 답변에서 말했듯이 캐스팅)이 올바른 해결책으로 보입니다 .

그렇지 않으면 루프를 구식 방식으로 코딩 (즉, 각 바이트가 0인지 테스트)하고 컴파일러 최적화가 루프를 풀어 주도록합니다.