rb-tree 구현을 작성했습니다. 노드는 malloc을 사용하여 할당됩니다. 큰 테이블을 처음부터 할당하고 그 공간을 사용하여 노드를 할당하고 테이블이 오버 플로우 될 때마다 크기를 두 배로하는 것이 좋습니다. 이렇게하면 삽입 작업이 다소 빨라집니다. 할당 할 시간이 중요하지 않다고 확신하는 경우입니다.내 redblack 트리 구현 개선
1
A
답변
1
하나의 큰 블록을 할당하는 것이 더 나은지 (그리고 스스로 분리 할 것인가) 많은 작은 항목을 할당하는 것이 많은 상황에 적용되는지에 대한 의문이 있습니다. 그리고 그것을위한 하나의 크기에 맞는 답이 없습니다. 일반적으로, 그러나, 그것은 아마 큰 블록을 할당하는 것이 빠릅니다. 그러나 속도 향상 (있을 경우)은 클 수 없습니다. 필자의 경험에 비추어 볼 때 단일 할당을 수행하는 것은 일반적으로 동적 할당을 많이 사용하는 고도의 동시 시스템에서의 노력과 복잡성에 가치가 있습니다. 단일 스레드 응용 프로그램이있는 경우, 각 노드의 할당이 삽입 작업에 소요되는 비용이 매우 적을 것이라고 생각합니다.
일부 일반의 생각/의견 :
- 하나의 큰 블록을 할당 (그리고 필요에 따라 성장)은 일반적으로 전체 메모리를 적게 사용합니다. 일반적인 범용 할당 자 (예 : C의 malloc/free)는 각 할당마다 오버 헤드가 있습니다. 예를 들어, 100 바이트의 작은 할당 요청은 128 바이트를 사용하게됩니다.
- 많은 양의 메모리 조각화가있는 메모리 제약 시스템에서는 큰 메모리 블록을 할당하고 조각화 할 수 없지만 여러 개의 작은 할당은 여전히 성공할 수 있습니다.
- 큰 블록을 할당해도 할당 자 수준 (예 : malloc)에서 동기화에 대한 경합이 줄어들지 만 자신의 관리 목록/블록에서 노드를 가져올 때 자신의 동기화를 제공해야합니다 (다중 스레드 시스템). 그러나 노드 자체의 삽입과 관련된 동기화가있을 수 있으므로 동일한 작업에서 처리 할 수 있습니다.
궁극적으로 테스트하고 차이를 측정해야합니다. 당신이 할 수있는 간단한 일은 처리 할 것으로 예상되는 노드의 수를 할당하는 단순한 "버림 (throw-away)"테스트를 작성하는 것입니다. 소요 시간은 얼마입니까? 이렇게하면 할당 비용에 대한 일종의 야간 예상치를 얻을 수 있습니다.
관련 문제
- 1. RedBlack Trees : redblack 트리의 노드 삭제를 이해하려고합니다.
- 2. Android ViewFlipper에서 Rotate3dAnimation의 구현 개선
- 3. 메모리 내 B 트리 삽입 구현
- 4. 자바에서 내 자신의 트리 집합을 구현
- 5. MySQL B + 트리 구현
- 6. C# minimax 트리 구현
- 7. tictactoe 트리 구현
- 8. Abstrac 구문 트리 구현
- 9. 동작 트리 구현
- 10. B + 트리 구현
- 11. SQL에서 KD 트리 구현
- 12. B 트리 구현
- 13. 구현 이진 트리 루비
- 14. B + 트리 구현, * * vs *
- 15. 바이너리 트리 구현 C++
- 16. 이진 트리 모나드 구현
- 17. 스플레이 트리 검색 구현
- 18. C++ AVL 트리 구현
- 19. AVL 트리 구현
- 20. 스칼라에서 이진 트리 구현
- 21. 레드 - 블랙 트리 구현
- 22. 지수 트리 구현
- 23. 계층 적 트리 구현
- 24. Smalltalk의 트리 구현
- 25. 세그먼트 트리 Java 구현
- 26. IPad에서 트리 구조 구현
- 27. b + 트리 전체 구현
- 28. 바이너리 트리 구현
- 29. 트리 이터레이터 구현
- 30. PostgreSQL B + 트리 구현