mirror of
https://github.com/gperftools/gperftools
synced 2024-12-23 15:52:10 +00:00
db98aac55a
Previously, the central free list with index '0' was always unused, since freelist index 'i' tracked spans of length 'i' and there are no spans of length 0. This meant that there was no freelist for spans of length 'kMaxPages'. In the default configuration, this corresponds to 1MB, which is a relatively common allocation size in a lot of applications. This changes the free list indexing so that index 'i' tracks spans of length 'i + 1', meaning that free list index 0 is now used and freelist[kMaxPages - 1] tracks allocations of kMaxPages size (1MB by default). This also fixes the stats output to indicate '>128' for the large spans stats rather than the incorrect '>255' which must have referred to a historical value of kMaxPages. No new tests are added since this code is covered by existing tests.
26 lines
691 B
Plaintext
26 lines
691 B
Plaintext
digraph PageHeap {
|
|
rankdir=LR
|
|
node [shape=box, width=0.3, height=0.3]
|
|
nodesep=.05
|
|
|
|
heap [shape=record, height=3, label="<f0>1 page|<f1>2 pages|<f2>3 pages|...|<f128>128 pages"]
|
|
O0 [shape=record, label=""]
|
|
O1 [shape=record, label=""]
|
|
O2 [shape=record, label="{|}"]
|
|
O3 [shape=record, label="{|}"]
|
|
O4 [shape=record, label="{||}"]
|
|
O5 [shape=record, label="{||}"]
|
|
O6 [shape=record, label="{|...|}"]
|
|
O7 [shape=record, label="{|...|}"]
|
|
sep1 [shape=plaintext, label="..."]
|
|
sep2 [shape=plaintext, label="..."]
|
|
sep3 [shape=plaintext, label="..."]
|
|
sep4 [shape=plaintext, label="..."]
|
|
|
|
heap:f0 -> O0 -> O1 -> sep1
|
|
heap:f1 -> O2 -> O3 -> sep2
|
|
heap:f2 -> O4 -> O5 -> sep3
|
|
heap:f128 -> O6 -> O7 -> sep4
|
|
|
|
}
|