func printComment(w io.Writer, classes []class) {
fmt.Fprintf(w, "// %-5s %-9s %-10s %-7s %-10s %-9s %-9s\n", "class", "bytes/obj", "bytes/span", "objects", "tail waste", "max waste", "min align")
prevSize := 0
- var minAligns [32]int
+ var minAligns [pageShift + 1]int
for i, c := range classes {
if i == 0 {
continue
tailWaste := spanSize - c.size*(spanSize/c.size)
maxWaste := float64((c.size-prevSize-1)*objects+tailWaste) / float64(spanSize)
alignBits := bits.TrailingZeros(uint(c.size))
+ if alignBits > pageShift {
+ // object alignment is capped at page alignment
+ alignBits = pageShift
+ }
for i := range minAligns {
if i > alignBits {
minAligns[i] = 0
// 56 12288 24576 2 0 11.45% 4096
// 57 13568 40960 3 256 9.99% 256
// 58 14336 57344 4 0 5.35% 2048
-// 59 16384 16384 1 0 12.49% 16384
+// 59 16384 16384 1 0 12.49% 8192
// 60 18432 73728 4 0 11.11% 2048
// 61 19072 57344 3 128 3.57% 128
// 62 20480 40960 2 0 6.87% 4096
// 64 24576 24576 1 0 11.45% 8192
// 65 27264 81920 3 128 10.00% 128
// 66 28672 57344 2 0 4.91% 4096
-// 67 32768 32768 1 0 12.50% 32768
+// 67 32768 32768 1 0 12.50% 8192
// alignment bits min obj size
// 8 3 8
// 64 6 512
// 128 7 768
// 4096 12 28672
-// 32768 15 32768
+// 8192 13 32768
const (
_MaxSmallSize = 32768