이 함수는 다음과 같습니다. void doSomething(unsigned char buff[50]);
내 함수에서 수행하고 싶은 것은 buff가 모두 null인지 빠르게 판단합니다. 루프 또는 루프가없는 큰 블록의 메모리
전체 버퍼를 루핑하지 않고 C에서이 작업을 수행하는 쉬운 방법이 있습니까? 크로스 플랫폼이라면 좋을 것입니다.
이 함수는 다음과 같습니다. void doSomething(unsigned char buff[50]);
내 함수에서 수행하고 싶은 것은 buff가 모두 null인지 빠르게 판단합니다. 루프 또는 루프가없는 큰 블록의 메모리
전체 버퍼를 루핑하지 않고 C에서이 작업을 수행하는 쉬운 방법이 있습니까? 크로스 플랫폼이라면 좋을 것입니다.
아니요. 그러나 검사를 수행하기 전에 32 비트 또는 64 비트 유형으로 변환하여 반복 횟수를 줄일 수 있습니다. 마지막 16 비트를 올바르게 처리하십시오.
또한 정렬 문제를 올바르게 처리해야합니다. –
x86에서는 이식 할 수 없지만 REP SCAS{B,W,D} instructions을 사용하면 x86에서이 작업을 수행 할 수 있습니다.
나는 응답의 일부가 버퍼의 길이에 달려 있다고 생각한다.
버퍼가 50 바이트 길이 인 경우 (즉, 길이가 매우 짧고 길이가 컴파일 타임에 알려짐) 예, 비트 OR (및 Ignacio가 다른 답변에서 말했듯이 캐스팅)이 올바른 해결책으로 보입니다 .
그렇지 않으면 루프를 구식 방식으로 코딩 (즉, 각 바이트가 0인지 테스트)하고 컴파일러 최적화가 루프를 풀어 주도록합니다.
나는 당신이 무엇을 제안하고 있는지 정확히 모르겠다 - 당신은 어떻게 비트 식으로 또는 버퍼링을 통해 루핑하지 않을 것인가? –
가능한 [C에서 모두 제로 버퍼를 확인하는 빠른 접근법]의 복제본? (http://stackoverflow.com/questions/1493936/faster-approach-to-checking-for-an-all-zero-buffer- in-c) – jweyrich