size_t strlen_d2(const char* s) // 313 clocks // 72065 clocks
{
const size_t* p = (size_t*)s;
size_t a, b, c, d;
do
{
a = *p & 0xFF;
b = *p >> 8 & 0xFF;
c = *p >> 16 & 0xFF;
d = *p >> 24 & 0xFF;
p++;
}
while(a * b * c * d);
if(!a) return size_t((const char*)p - s - 4);
if(!b) return size_t((const char*)p - s - 3);
if(!c) return size_t((const char*)p - s - 2);
return size_t((const char*)p - s - 1);
}
ps2. 하지만 여기서 더 최적화 할 수 있다는거.
길이 mod 4만큼 끝부분 넘겨서 읽을텐데, 문자열로 쓴 버퍼 너머면 읽는 거로 뒈짖하는 컴퓨터 없음?
보통 최소 쿼드 얼라인 따르기 땜에 상관없슈.
a * b * c * d ==> a & b & c & d
ㅅㅅㅅ 가 졸린가부다.
저기 true false 를 담은게 아니라서 말야.
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.