blob: 97ce6f11156a6838b9ff29c7dee8c52fc0352e0b [file] [log] [blame] [view]
# Bucket Distribution in PartitionAlloc
In PartitionAlloc, a slab-based memory allocator, a "bucket" serves to
categorize different memory allocation sizes. When memory is requested,
PartitionAlloc rounds the requested size up to the nearest predefined size class
(referred to as slot size). Allocations that map to the same bucket are then
grouped together and allocated from a size-segregated slot span.
A bucket, therefore, defines a specific size category. This bucketing strategy
is key to how PartitionAlloc manages and organizes memory efficiently, offering
several benefits:
- Increased cache locality for same-size allocations
- Smaller metadata
- Easy mapping of address to size
- Decreased fragmentation over time
This document describes PartitionAlloc's methodology for mapping requested
allocation sizes to their corresponding buckets. See
`//partition_alloc/bucket_lookup.h` for implementation details.
## Bucket Distribution Types
PartitionAlloc provides [two different distributions](https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_allocator/src/partition_alloc/partition_root.h;l=238;drc=b3b10b6e91991505faa738b47ad263534341e05d);
Neutral and Denser.
As the name tells, Denser offers a more granular set of buckets, roughly
doubling the number compared to the Neutral distribution.
1. **Neutral Bucket Distribution** (`kNeutral`)
* **Pro:** Results in fewer partially-filled slot spans, potentially reducing fragmentation caused by unused slots in these spans.
* **Con:** Allocations are often rounded up to a significantly larger slot
size than requested. This increases fragmentation *within* each allocation due
to the larger difference between the requested size and the allocated slot
size.
2. **Denser Bucket Distribution** (`kDenser`):
* **Pro:** Allocations can more closely match the requested memory size.
This reduces fragmentation *within* each allocation, as the chosen slot size
is nearer to the actual need.
* **Con:** May lead to more partially-filled slot spans. If these slot spans
are not fully utilized, it can increase fragmentation due to more unused slots
across these spans.
The Neutral distribution is implemented as a variation of the Denser one, making
it straightforward to understand if one understands the Denser layout.
## Denser Bucket Distribution: A Closer Look
The Denser distribution itself operates as a hybrid system. For smaller
allocation sizes, bucket sizes increase in a simple, linear fashion. Conversely,
for larger allocation sizes, the bucket sizes increase exponentially.
### Linear Sizing (for Smaller Allocations)
When an allocation request is for a relatively small amount of memory, the
system employs a linear scale. This means each subsequent bucket size is larger
than the previous one by a fixed increment. This increment is determined by the
system's fundamental memory alignment requirement, which might be, for instance,
16 bytes. As an example, if this fixed increment is 16 bytes, the sequence of
buckets might represent sizes such as 16 bytes, 32 bytes, 48 bytes, and so on.
### Exponential Sizing (for Larger Allocations)
For larger memory requests, the bucket sizes adhere to an exponential pattern.
The system divides broad power-of-two ranges, termed "orders," into a fixed
number of smaller bucket steps. For instance, the range of sizes from 128 bytes
up to, but not including, 256 bytes constitutes an "order," and it would contain
a specific number of distinct bucket sizes. The subsequent order, such as 256 to
511 bytes, would be similarly divided.
A fixed number of buckets, for example eight, are used to subdivide each
power-of-two range, creating what is known as "Buckets per Order." This
configuration results in a logarithmic scale where bucket sizes grow
proportionally rather than by a fixed additive amount. To illustrate with an
example using 8 buckets per order, sizes just above 128 bytes might be 128
bytes, then approximately 1.125x128 bytes, 1.25x128 bytes, and continue in this
manner up to nearly 256 bytes. This pattern then repeats for sizes above 256
bytes, then 512 bytes, and so forth.
||Order-Index 0|Order-Index 1|Order-Index 2|Order-Index 3|Order-Index 4|Order-Index 5|Order-Index 6|Order-Index 7|
|-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|Order 8 (2⁷)|121-128|129-144|145-160|161-176|177-192|193-208|209-224|225-240|
|Order 9 (2⁸)|241-256|257-288|289-320|321-352|353-384|385-416|417-448|449-480|
|Order 10 (2⁹)|481-512|513-576|577-640|641-704|705-768|769-832|833-896|897-960|
## Neutral Bucket Distribution
The Neutral Bucket Distribution offers a sparser alternative, derived from the
Denser one. In the range where the Denser distribution uses linear sizing, or
for the smallest exponential sizes where alignment naturally limits bucket
density, the Neutral and Denser distributions are identical. However, for larger
sizes within the exponential sizing range, the Neutral distribution typically
uses fewer buckets per "order" compared to the Denser one. It selects every
other bucket that the Denser distribution would define, leading to fewer, more
widely spaced buckets.
Consider an illustrative conceptual difference: if the Denser distribution has
buckets for sizes like ..., 384, 416, 448, 480, 512, ..., the Neutral
distribution, in the same range, might only have buckets for ..., 384, then skip
416 to use 448, then skip 480 to use 512, and so on.
## Example Distribution
### 8 Bytes Alignment (Typically 32-bit Systems)
| Index | Size | Bucket Distribution | Originating Formula |
| -: | -: | :- | :- |
| 0 | 8 | `kNeutral` and `kDenser` | linear [8 x 1] |
| 1 | 16 | `kNeutral` and `kDenser` | linear [8 x 2] |
| 2 | 24 | `kNeutral` and `kDenser` | linear [8 x 3] |
| 3 | 32 | `kNeutral` and `kDenser` | linear [8 x 4] |
| 4 | 40 | `kNeutral` and `kDenser` | linear [8 x 5] |
| 5 | 48 | `kNeutral` and `kDenser` | linear [8 x 6] |
| 6 | 56 | `kNeutral` and `kDenser` | linear [8 x 7] |
| 7 | 64 | `kNeutral` and `kDenser` | linear [8 x 8] yet exponential [2 x (1 + 0)] |
| 8 | 72 | `kNeutral` and `kDenser` | linear [8 x 9] yet exponential [2 x (1 + ⅛)] |
| 9 | 80 | `kNeutral` and `kDenser` | linear [8 x 10] yet exponential [2 x (1 + ¼)] |
| 10 | 88 | `kNeutral` and `kDenser` | linear [8 x 11] yet exponential [2 x (1 + ⅜)] |
| 11 | 96 | `kNeutral` and `kDenser` | linear [8 x 12] yet exponential [2 x (1 + ½)] |
| 12 | 104 | `kNeutral` and `kDenser` | linear [8 x 13] yet exponential [2 x (1 + ⅝)] |
| 13 | 112 | `kNeutral` and `kDenser` | linear [8 x 14] yet exponential [2 x (1 + ¾)] |
| 14 | 120 | `kNeutral` and `kDenser` | linear [8 x 15] yet exponential [2 x (1 + ⅞)] |
| 15 | 128 | `kNeutral` and `kDenser` | linear [8 x 16] yet exponential [2 x (1 + 0)] |
| 16 | 144 | `kDenser` only | exponential [2 x (1 + ⅛)] |
| 17 | 160 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¼)] |
| 18 | 176 | `kDenser` only | exponential [2 x (1 + ⅜)] |
| 19 | 192 | `kNeutral` and `kDenser` | exponential [2 x (1 + ½)] |
| 20 | 208 | `kDenser` only | exponential [2 x (1 + ⅝)] |
| 21 | 224 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¾)] |
| 22 | 240 | `kDenser` only | exponential [2 x (1 + ⅞)] |
| 23 | 256 | `kNeutral` and `kDenser` | exponential [2 x (1 + 0)] |
| 24 | 288 | `kDenser` only | exponential [2 x (1 + ⅛)] |
| 25 | 320 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¼)] |
| 26 | 352 | `kDenser` only | exponential [2 x (1 + ⅜)] |
| 27 | 384 | `kNeutral` and `kDenser` | exponential [2 x (1 + ½)] |
| 28 | 416 | `kDenser` only | exponential [2 x (1 + ⅝)] |
| 29 | 448 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¾)] |
| 30 | 480 | `kDenser` only | exponential [2 x (1 + ⅞)] |
| 31 | 512 | `kNeutral` and `kDenser` | exponential [2 x (1 + 0)] |
| 32 | 576 | `kDenser` only | exponential [2 x (1 + ⅛)] |
| 33 | 640 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¼)] |
| 34 | 704 | `kDenser` only | exponential [2 x (1 + ⅜)] |
| 35 | 768 | `kNeutral` and `kDenser` | exponential [2 x (1 + ½)] |
| 36 | 832 | `kDenser` only | exponential [2 x (1 + ⅝)] |
| 37 | 896 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¾)] |
| 38 | 960 | `kDenser` only | exponential [2 x (1 + ⅞)] |
| 39 | 1024 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + 0)] |
| 40 | 1152 | `kDenser` only | exponential [2¹⁰ x (1 + ⅛)] |
| 41 | 1280 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ¼)] |
| 42 | 1408 | `kDenser` only | exponential [2¹⁰ x (1 + ⅜)] |
| 43 | 1536 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ½)] |
| 44 | 1664 | `kDenser` only | exponential [2¹⁰ x (1 + ⅝)] |
| 45 | 1792 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ¾)] |
| 46 | 1920 | `kDenser` only | exponential [2¹⁰ x (1 + ⅞)] |
| 47 | 2048 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + 0)] |
| 48 | 2304 | `kDenser` only | exponential [2¹¹ x (1 + ⅛)] |
| 49 | 2560 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ¼)] |
| 50 | 2816 | `kDenser` only | exponential [2¹¹ x (1 + ⅜)] |
| 51 | 3072 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ½)] |
| 52 | 3328 | `kDenser` only | exponential [2¹¹ x (1 + ⅝)] |
| 53 | 3584 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ¾)] |
| 54 | 3840 | `kDenser` only | exponential [2¹¹ x (1 + ⅞)] |
| 55 | 4096 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + 0)] |
| 56 | 4608 | `kDenser` only | exponential [2¹² x (1 + ⅛)] |
| 57 | 5120 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ¼)] |
| 58 | 5632 | `kDenser` only | exponential [2¹² x (1 + ⅜)] |
| 59 | 6144 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ½)] |
| 60 | 6656 | `kDenser` only | exponential [2¹² x (1 + ⅝)] |
| 61 | 7168 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ¾)] |
| 62 | 7680 | `kDenser` only | exponential [2¹² x (1 + ⅞)] |
| 63 | 8192 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + 0)] |
| 64 | 9216 | `kDenser` only | exponential [2¹³ x (1 + ⅛)] |
| 65 | 10240 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ¼)] |
| 66 | 11264 | `kDenser` only | exponential [2¹³ x (1 + ⅜)] |
| 67 | 12288 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ½)] |
| 68 | 13312 | `kDenser` only | exponential [2¹³ x (1 + ⅝)] |
| 69 | 14336 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ¾)] |
| 70 | 15360 | `kDenser` only | exponential [2¹³ x (1 + ⅞)] |
| 71 | 16384 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + 0)] |
| 72 | 18432 | `kDenser` only | exponential [2¹⁴ x (1 + ⅛)] |
| 73 | 20480 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ¼)] |
| 74 | 22528 | `kDenser` only | exponential [2¹⁴ x (1 + ⅜)] |
| 75 | 24576 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ½)] |
| 76 | 26624 | `kDenser` only | exponential [2¹⁴ x (1 + ⅝)] |
| 77 | 28672 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ¾)] |
| 78 | 30720 | `kDenser` only | exponential [2¹⁴ x (1 + ⅞)] |
| 79 | 32768 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + 0)] |
| 80 | 36864 | `kDenser` only | exponential [2¹⁵ x (1 + ⅛)] |
| 81 | 40960 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ¼)] |
| 82 | 45056 | `kDenser` only | exponential [2¹⁵ x (1 + ⅜)] |
| 83 | 49152 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ½)] |
| 84 | 53248 | `kDenser` only | exponential [2¹⁵ x (1 + ⅝)] |
| 85 | 57344 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ¾)] |
| 86 | 61440 | `kDenser` only | exponential [2¹⁵ x (1 + ⅞)] |
| 87 | 65536 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + 0)] |
| 88 | 73728 | `kDenser` only | exponential [2¹⁶ x (1 + ⅛)] |
| 89 | 81920 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ¼)] |
| 90 | 90112 | `kDenser` only | exponential [2¹⁶ x (1 + ⅜)] |
| 91 | 98304 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ½)] |
| 92 | 106496 | `kDenser` only | exponential [2¹⁶ x (1 + ⅝)] |
| 93 | 114688 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ¾)] |
| 94 | 122880 | `kDenser` only | exponential [2¹⁶ x (1 + ⅞)] |
| 95 | 131072 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + 0)] |
| 96 | 147456 | `kDenser` only | exponential [2¹⁷ x (1 + ⅛)] |
| 97 | 163840 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ¼)] |
| 98 | 180224 | `kDenser` only | exponential [2¹⁷ x (1 + ⅜)] |
| 99 | 196608 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ½)] |
| 100 | 212992 | `kDenser` only | exponential [2¹⁷ x (1 + ⅝)] |
| 101 | 229376 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ¾)] |
| 102 | 245760 | `kDenser` only | exponential [2¹⁷ x (1 + ⅞)] |
| 103 | 262144 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + 0)] |
| 104 | 294912 | `kDenser` only | exponential [2¹⁸ x (1 + ⅛)] |
| 105 | 327680 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ¼)] |
| 106 | 360448 | `kDenser` only | exponential [2¹⁸ x (1 + ⅜)] |
| 107 | 393216 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ½)] |
| 108 | 425984 | `kDenser` only | exponential [2¹⁸ x (1 + ⅝)] |
| 109 | 458752 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ¾)] |
| 110 | 491520 | `kDenser` only | exponential [2¹⁸ x (1 + ⅞)] |
| 111 | 524288 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + 0)] |
| 112 | 589824 | `kDenser` only | exponential [2¹⁹ x (1 + ⅛)] |
| 113 | 655360 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ¼)] |
| 114 | 720896 | `kDenser` only | exponential [2¹⁹ x (1 + ⅜)] |
| 115 | 786432 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ½)] |
| 116 | 851968 | `kDenser` only | exponential [2¹⁹ x (1 + ⅝)] |
| 117 | 917504 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ¾)] |
| 118 | 983040 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ⅞)] |
### 16 Bytes Alignment (Typically 64-bit Systems)
| Index | Size | Bucket Distribution | Originating Formula |
| -: | -: | :- | :- |
| 0 | 16 | `kNeutral` and `kDenser` | linear [16 x 1] |
| 1 | 32 | `kNeutral` and `kDenser` | linear [16 x 2] |
| 2 | 48 | `kNeutral` and `kDenser` | linear [16 x 3] |
| 3 | 64 | `kNeutral` and `kDenser` | linear [16 x 4] |
| 4 | 80 | `kNeutral` and `kDenser` | linear [16 x 5] |
| 5 | 96 | `kNeutral` and `kDenser` | linear [16 x 6] |
| 6 | 112 | `kNeutral` and `kDenser` | linear [16 x 7] |
| 7 | 128 | `kNeutral` and `kDenser` | linear [16 x 8] yet exponential [2 x (1 + 0)] |
| 8 | 144 | `kNeutral` and `kDenser` | linear [16 x 9] yet exponential [2 x (1 + ⅛)] |
| 9 | 160 | `kNeutral` and `kDenser` | linear [16 x 10] yet exponential [2 x (1 + ¼)] |
| 10 | 176 | `kNeutral` and `kDenser` | linear [16 x 11] yet exponential [2 x (1 + ⅜)] |
| 11 | 192 | `kNeutral` and `kDenser` | linear [16 x 12] yet exponential [2 x (1 + ½)] |
| 12 | 208 | `kNeutral` and `kDenser` | linear [16 x 13] yet exponential [2 x (1 + ⅝)] |
| 13 | 224 | `kNeutral` and `kDenser` | linear [16 x 14] yet exponential [2 x (1 + ¾)] |
| 14 | 240 | `kNeutral` and `kDenser` | linear [16 x 15] yet exponential [2 x (1 + ⅞)] |
| 15 | 256 | `kNeutral` and `kDenser` | linear [16 x 16] yet exponential [2 x (1 + 0)] |
| 16 | 288 | `kDenser` only | exponential [2 x (1 + ⅛)] |
| 17 | 320 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¼)] |
| 18 | 352 | `kDenser` only | exponential [2 x (1 + ⅜)] |
| 19 | 384 | `kNeutral` and `kDenser` | exponential [2 x (1 + ½)] |
| 20 | 416 | `kDenser` only | exponential [2 x (1 + ⅝)] |
| 21 | 448 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¾)] |
| 22 | 480 | `kDenser` only | exponential [2 x (1 + ⅞)] |
| 23 | 512 | `kNeutral` and `kDenser` | exponential [2 x (1 + 0)] |
| 24 | 576 | `kDenser` only | exponential [2 x (1 + ⅛)] |
| 25 | 640 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¼)] |
| 26 | 704 | `kDenser` only | exponential [2 x (1 + ⅜)] |
| 27 | 768 | `kNeutral` and `kDenser` | exponential [2 x (1 + ½)] |
| 28 | 832 | `kDenser` only | exponential [2 x (1 + ⅝)] |
| 29 | 896 | `kNeutral` and `kDenser` | exponential [2 x (1 + ¾)] |
| 30 | 960 | `kDenser` only | exponential [2 x (1 + ⅞)] |
| 31 | 1024 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + 0)] |
| 32 | 1152 | `kDenser` only | exponential [2¹⁰ x (1 + ⅛)] |
| 33 | 1280 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ¼)] |
| 34 | 1408 | `kDenser` only | exponential [2¹⁰ x (1 + ⅜)] |
| 35 | 1536 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ½)] |
| 36 | 1664 | `kDenser` only | exponential [2¹⁰ x (1 + ⅝)] |
| 37 | 1792 | `kNeutral` and `kDenser` | exponential [2¹⁰ x (1 + ¾)] |
| 38 | 1920 | `kDenser` only | exponential [2¹⁰ x (1 + ⅞)] |
| 39 | 2048 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + 0)] |
| 40 | 2304 | `kDenser` only | exponential [2¹¹ x (1 + ⅛)] |
| 41 | 2560 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ¼)] |
| 42 | 2816 | `kDenser` only | exponential [2¹¹ x (1 + ⅜)] |
| 43 | 3072 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ½)] |
| 44 | 3328 | `kDenser` only | exponential [2¹¹ x (1 + ⅝)] |
| 45 | 3584 | `kNeutral` and `kDenser` | exponential [2¹¹ x (1 + ¾)] |
| 46 | 3840 | `kDenser` only | exponential [2¹¹ x (1 + ⅞)] |
| 47 | 4096 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + 0)] |
| 48 | 4608 | `kDenser` only | exponential [2¹² x (1 + ⅛)] |
| 49 | 5120 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ¼)] |
| 50 | 5632 | `kDenser` only | exponential [2¹² x (1 + ⅜)] |
| 51 | 6144 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ½)] |
| 52 | 6656 | `kDenser` only | exponential [2¹² x (1 + ⅝)] |
| 53 | 7168 | `kNeutral` and `kDenser` | exponential [2¹² x (1 + ¾)] |
| 54 | 7680 | `kDenser` only | exponential [2¹² x (1 + ⅞)] |
| 55 | 8192 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + 0)] |
| 56 | 9216 | `kDenser` only | exponential [2¹³ x (1 + ⅛)] |
| 57 | 10240 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ¼)] |
| 58 | 11264 | `kDenser` only | exponential [2¹³ x (1 + ⅜)] |
| 59 | 12288 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ½)] |
| 60 | 13312 | `kDenser` only | exponential [2¹³ x (1 + ⅝)] |
| 61 | 14336 | `kNeutral` and `kDenser` | exponential [2¹³ x (1 + ¾)] |
| 62 | 15360 | `kDenser` only | exponential [2¹³ x (1 + ⅞)] |
| 63 | 16384 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + 0)] |
| 64 | 18432 | `kDenser` only | exponential [2¹⁴ x (1 + ⅛)] |
| 65 | 20480 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ¼)] |
| 66 | 22528 | `kDenser` only | exponential [2¹⁴ x (1 + ⅜)] |
| 67 | 24576 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ½)] |
| 68 | 26624 | `kDenser` only | exponential [2¹⁴ x (1 + ⅝)] |
| 69 | 28672 | `kNeutral` and `kDenser` | exponential [2¹⁴ x (1 + ¾)] |
| 70 | 30720 | `kDenser` only | exponential [2¹⁴ x (1 + ⅞)] |
| 71 | 32768 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + 0)] |
| 72 | 36864 | `kDenser` only | exponential [2¹⁵ x (1 + ⅛)] |
| 73 | 40960 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ¼)] |
| 74 | 45056 | `kDenser` only | exponential [2¹⁵ x (1 + ⅜)] |
| 75 | 49152 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ½)] |
| 76 | 53248 | `kDenser` only | exponential [2¹⁵ x (1 + ⅝)] |
| 77 | 57344 | `kNeutral` and `kDenser` | exponential [2¹⁵ x (1 + ¾)] |
| 78 | 61440 | `kDenser` only | exponential [2¹⁵ x (1 + ⅞)] |
| 79 | 65536 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + 0)] |
| 80 | 73728 | `kDenser` only | exponential [2¹⁶ x (1 + ⅛)] |
| 81 | 81920 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ¼)] |
| 82 | 90112 | `kDenser` only | exponential [2¹⁶ x (1 + ⅜)] |
| 83 | 98304 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ½)] |
| 84 | 106496 | `kDenser` only | exponential [2¹⁶ x (1 + ⅝)] |
| 85 | 114688 | `kNeutral` and `kDenser` | exponential [2¹⁶ x (1 + ¾)] |
| 86 | 122880 | `kDenser` only | exponential [2¹⁶ x (1 + ⅞)] |
| 87 | 131072 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + 0)] |
| 88 | 147456 | `kDenser` only | exponential [2¹⁷ x (1 + ⅛)] |
| 89 | 163840 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ¼)] |
| 90 | 180224 | `kDenser` only | exponential [2¹⁷ x (1 + ⅜)] |
| 91 | 196608 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ½)] |
| 92 | 212992 | `kDenser` only | exponential [2¹⁷ x (1 + ⅝)] |
| 93 | 229376 | `kNeutral` and `kDenser` | exponential [2¹⁷ x (1 + ¾)] |
| 94 | 245760 | `kDenser` only | exponential [2¹⁷ x (1 + ⅞)] |
| 95 | 262144 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + 0)] |
| 96 | 294912 | `kDenser` only | exponential [2¹⁸ x (1 + ⅛)] |
| 97 | 327680 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ¼)] |
| 98 | 360448 | `kDenser` only | exponential [2¹⁸ x (1 + ⅜)] |
| 99 | 393216 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ½)] |
| 100 | 425984 | `kDenser` only | exponential [2¹⁸ x (1 + ⅝)] |
| 101 | 458752 | `kNeutral` and `kDenser` | exponential [2¹⁸ x (1 + ¾)] |
| 102 | 491520 | `kDenser` only | exponential [2¹⁸ x (1 + ⅞)] |
| 103 | 524288 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + 0)] |
| 104 | 589824 | `kDenser` only | exponential [2¹⁹ x (1 + ⅛)] |
| 105 | 655360 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ¼)] |
| 106 | 720896 | `kDenser` only | exponential [2¹⁹ x (1 + ⅜)] |
| 107 | 786432 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ½)] |
| 108 | 851968 | `kDenser` only | exponential [2¹⁹ x (1 + ⅝)] |
| 109 | 917504 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ¾)] |
| 110 | 983040 | `kNeutral` and `kDenser` | exponential [2¹⁹ x (1 + ⅞)] |