diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 891320b..1f3843b 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -247,6 +247,19 @@ struct Node256 : Node { uint8_t *partialKey() { return (uint8_t *)(this + 1); } }; +// Bound memory usage following the analysis in the ART paper + +constexpr int kBytesPerKey = 86; +constexpr int kMinChildrenNode4 = 2; +constexpr int kMinChildrenNode16 = 5; +constexpr int kMinChildrenNode48 = 17; +constexpr int kMinChildrenNode256 = 49; + +static_assert(sizeof(Node256) < kMinChildrenNode256 * kBytesPerKey); +static_assert(sizeof(Node48) < kMinChildrenNode48 * kBytesPerKey); +static_assert(sizeof(Node16) < kMinChildrenNode16 * kBytesPerKey); +static_assert(sizeof(Node4) < kMinChildrenNode4 * kBytesPerKey); + // Bounds memory usage in free list, but does not account for memory for partial // keys. template