1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
|
# 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 + ⅞)] |
|