File: buckets.md

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (342 lines) | stat: -rw-r--r-- 23,751 bytes parent folder | download | duplicates (5)
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 + ⅞)] |