2012-02-16 4 views
2

내가이 구조체의 100,000 + 항목과 tailq이 발행 :C의 tailq 큐 대체

struct entry { 
char *file_name; 
FILE *file; 
TAILQ_ENTRY(entry) tailq; 
}; 

목적은 응용 프로그램이 파일의 수천을 생성하고 그들에게 거즈를 추가하기위한 파일 포인터의 저장 수천이다.

그렇지 않으면 다음 ID를 추가 꼬리에없는 경우, 이미 tailq에 일부 임시 이름을 검색
int c; 
char temp[20]; 

struct entry *np; 

TAILQ_FOREACH(np, &tailq_head[y], tailq) { 
    if(strcmp(np->file_name, temp) == 0){ 
     c = 1; 
     break; 
    } 
} 

이 안 함 : tailq의 각 증가에

나는 foreach는이 .

성능을 향상 시키려면 어떻게해야합니까? 내가 사용할 수있는 더 빠른 구조는 무엇입니까? foreach에서 비교할 임시 변수에 대한 정수 해시를 계산해야합니까? 아이디어?

+0

파일 순서가 중요합니까? –

+0

@MarceloCantos no –

답변

2

각 항목에 이름의 정수 해시를 유지하면 비교 속도가 상당히 빨라집니다. 또한 포인터 간접 지정의 한 수준을 저장합니다. 그러나 당신은 여전히 ​​모든 단일 항목에 비교하고 있습니다. 해시 테이블과 같은 모든 단일 항목과 비교하지 않고 효율적인 검색을 제공하는 구조에 항목을 저장하면 성능 이점이 훨씬 커집니다.

+0

효율적인 검색을 제공하는 구조의 예를 제공 할 수 있습니까? –

+0

나는 [해시 테이블] (http://en.wikipedia.org/wiki/Hash_table)을 제안했으며 이는 아마도 가장 자연스러운 선택 일 것이다. 순서가 중요하지 않기 때문에 순서대로 유지하는 높은 가격을 지불하는 선택은 아무 것도 지불하지 않습니다. –

+0

거기에 리눅스의 일부 라이브러리에 해시 테이블의 구현은 무엇입니까? –