몇백 만 단어를 저장하기 위해 Trie을 만들었습니다.트라이 직렬화
typedef struct trie
{
struct trie* c[38];
unsigned int occ;
} trie_t;
여기서는 occurence의 수를 저장하는 숫자입니다. 0 인 경우 : 노드가 단어가 아닙니다. c [38]은 (는) 26 자 + 10 자 + '_'+ '입니다.
매번 빌드 할 필요없이 메모리에 다시 매핑 할 수 있도록 직렬화하려고합니다. 문제는 mrieoc을 사용하여 Trie를 생성하므로 모든 메모리가 연속적이지 않습니다.
Trie가 연속으로 생성 된 메모리를 강제로 적용하여 포인터를 오프셋으로 대체하고 전체 구조를 serialize 할 수 있습니다.
이것이 올바른 방법인가요? malloc을 사용하여이 작업을 수행 할 수 있습니까? 아니면이 작업을 수행하기 위해 자체 메모리 할당자를 작성해야합니까?
일단이 빌드는 일단 빌드되면 정적입니다 - 업데이트하지 마십시오? –
예. 업데이트가 없습니다. 트라이는 절대 바뀌지 않을 단어 목록에서 만들어집니다. – IggY
다음 빌드하십시오. C 규칙을 "구부릴"가능성이 높고 주소 지정을 수행하는 데 "문서화되지 않은 행위"에 의존해야한다는 것을 이해해야합니다. –