mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 06:25:31 +00:00
more in the data structure survey
@@ -55,6 +55,10 @@ Fixed-size array stack
|
|||||||
|
|
||||||
* `isc/netmgr/netmgr`
|
* `isc/netmgr/netmgr`
|
||||||
|
|
||||||
|
## notes
|
||||||
|
|
||||||
|
Locked.
|
||||||
|
|
||||||
|
|
||||||
# `isc/heap`
|
# `isc/heap`
|
||||||
|
|
||||||
@@ -68,7 +72,7 @@ Priority queue
|
|||||||
|
|
||||||
## notes
|
## notes
|
||||||
|
|
||||||
No locking / single-threaded.
|
Single-threaded.
|
||||||
|
|
||||||
|
|
||||||
# `isc/ht`
|
# `isc/ht`
|
||||||
@@ -84,12 +88,26 @@ Hash table
|
|||||||
|
|
||||||
## notes
|
## notes
|
||||||
|
|
||||||
No locking / single-threaded.
|
Single-threaded.
|
||||||
|
|
||||||
Uses chaining, so it is heavy on indirection and heavy on allocation.
|
Uses chaining, so it is heavy on indirection and heavy on allocation.
|
||||||
Modern hash tables use open addressing.
|
Modern hash tables use open addressing.
|
||||||
|
|
||||||
|
|
||||||
|
# `isc/pool`
|
||||||
|
|
||||||
|
A mechanism for sharing a small pool of fungible objects among a large
|
||||||
|
number of objects that depend on them.
|
||||||
|
|
||||||
|
## used by
|
||||||
|
|
||||||
|
* `dns/zone` for sharing memory contexts
|
||||||
|
|
||||||
|
## notes
|
||||||
|
|
||||||
|
Single-threaded.
|
||||||
|
|
||||||
|
|
||||||
# `isc/radix`
|
# `isc/radix`
|
||||||
|
|
||||||
Radix tree for IP address prefix matching
|
Radix tree for IP address prefix matching
|
||||||
@@ -101,6 +119,8 @@ Radix tree for IP address prefix matching
|
|||||||
|
|
||||||
## notes
|
## notes
|
||||||
|
|
||||||
|
Single-threaded.
|
||||||
|
|
||||||
Slightly unusual because it is first-match rather than best-match.
|
Slightly unusual because it is first-match rather than best-match.
|
||||||
|
|
||||||
Tests one bit at a time so there's an opportunity to improve with
|
Tests one bit at a time so there's an opportunity to improve with
|
||||||
@@ -108,3 +128,25 @@ Tests one bit at a time so there's an opportunity to improve with
|
|||||||
|
|
||||||
The nodes appear to be larger than necessary; is this a problem?
|
The nodes appear to be larger than necessary; is this a problem?
|
||||||
How big do ACLs get?
|
How big do ACLs get?
|
||||||
|
|
||||||
|
Uses reserved identifiers for static functions, which is undefined
|
||||||
|
behaviour.
|
||||||
|
|
||||||
|
|
||||||
|
# `isc/taskpool`
|
||||||
|
|
||||||
|
Like `isc/pool`, but specialized for tasks
|
||||||
|
|
||||||
|
## used by
|
||||||
|
|
||||||
|
* `dns/zone` for sharing tasks
|
||||||
|
|
||||||
|
## notes
|
||||||
|
|
||||||
|
Single-threaded.
|
||||||
|
|
||||||
|
Should probably be replaced by the more generic `isc/pool` (it looks
|
||||||
|
like that was the plan when `isc/pool` was added).
|
||||||
|
|
||||||
|
There appears to be a bug in `isc_taskpool_expand()` when it fails to
|
||||||
|
create a new task: the existing taskpool will be left empty.
|
||||||
|
Reference in New Issue
Block a user