2010-04-24 6 views
0

디스크에 STL set을 덤프하고 나중에 다시 읽을 수있는 빠른 방법이 있는지 궁금합니다.C++에서 직렬화 된 개체의 성능

set의 내부 구조는 이진 트리입니다. 따라서 순진하게 직렬화하면 프로그램을 다시 읽을 때 각 요소를 다시 삽입해야합니다. 나는 올바른 순서로 다시 읽더라도 이것이 느리다 고 생각한다. 내가 잘못하면 나를 바로 잡는다.

디스크에 세트가 들어있는 메모리를 "덤프"한 다음 나중에 다시 읽는 방법이 있습니까? 즉, 모든 것을 2 진 형식으로 유지하여 재 삽입을 피하십시오.

부스트 직렬화 도구가이를 수행합니까?

감사합니다.

편집 : 나는 지금 그것을 읽 http://www.parashift.com/c++-faq-lite/serialization.html ... 아니 정말

답변

2

각 요소는 힙에 있으므로 디스크에 덤프 할 수는 없습니다. 따라서 각 요소를 통과하는 적절한 직렬화 루틴이 필요합니다.

요소를 다시 읽으려면 "hints"를 사용할 수 있습니다.이 힌트를 사용하면 요소를 삽입해야하는 삽입 방법을 알 수 있습니다. 이것은 세트의 구성을 n log n 대신 선형 복잡도로 되돌릴 수 있습니다.

+0

오 예 ~ 맞습니다. 일부 삽입 함수에는 힌트가 있습니다. – jm1234567890

2

아니오, 당신은 실제로 하드 디스크에서 다시 읽기 (또는 아마 어떤 경우 도움이되지 않습니다 오, 나는 아마 읽어야 영구 저장 장치), 기계 부품이 병목 현상이됩니다.

컨테이너를 인접한 메모리 블록에 넣으면 해당 블록에 여유 공간이 있어야하며 디스크에서 낭비되는 공간을 읽는 데 시간과 디스크 공간이 낭비됩니다.

이것은 조숙 한 고전적인 최적화입니다.

실제로 자신이 필요로하는 경우 Boost Interprocess에는 (상대적으로) 직렬화가 쉬운 컨테이너가 있습니다.

+0

ok :(감사합니다.) 투표하기 전에 다른 의견이 있는지 확인해 보겠습니다. – jm1234567890

+1

@ jm1234567890 : 투표를 여러 번 할 수 있습니다. 수행하기 전에 기다리는 것이 좋습니다. – sbi