해시 또는 PHP와 같은 배열을 구현하고 싶습니다. 열쇠로 요소를 찾으려면 무엇이 더 좋고, 옵션 a) 또는 옵션 b)입니까? 어레이를 통해 루핑하는 것이 무엇이 더 빠르며 더 빠릅니까?
(모든 변수가 등등 설정 초기화된다!)A)
for(i = 0; i < ary->element_cnt && found == NULL; i++) {
current_element = &(ary->elements[i]);
if(0 == memcmp(current_element->key, search_key, keysize)) {
found = current_element;
}
}
b)는 훨씬 더 읽을 수 있기 때문에
for(i = 0, current_element = &(ary->elements[i]) ;
i < ary->element_cnt &&
0 != memcmp(current_element->key, searchkey, keysize);
i++, current_element = &(ary->elements[i]));
/*found = current_element;*/
은 첫 번째보다가/maintainable? 두 번째 것이 더 빠를 것입니까?
하나의 큰 루프에서 모든 것을 수행하는 것은 "나쁜 스타일"입니까?
알다시피, 거기에 훨씬 더 나은 검색 알 고가 있지만, 여기 내 문제가 아니에요!
두 번째 것이 더 빠릅니까? 생성 된 코드를 확인하고 일부 인식 최적화에 대한 가독성을 희생하기 전에 먼저 프로파일 링을 수행하십시오. –
수정 된 질문입니다. 나는 모른다! 내 말씨는 그랬어야했듯이 좋지 않았다. – musicmatze
그것은 주로 맛의 문제입니다. 성능 측면에서,'memcmp '에 들어가거나 나가기 위해 대부분의 시간이 소비 될 것이므로, 전체 시간의 상당 부분을 차지하는 경우, 나는 그것을 다르게하려고 노력할 것입니다. if (test (i))가 깨지면'for (i = n; -i> = 0;)을 자주 수행하고,'i'는 발견 된 요소입니다. –