"go/format"
"io"
"log"
+ "math/bits"
"os"
)
}
func printComment(w io.Writer, classes []class) {
- fmt.Fprintf(w, "// %-5s %-9s %-10s %-7s %-10s %-9s\n", "class", "bytes/obj", "bytes/span", "objects", "tail waste", "max waste")
+ 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
for i, c := range classes {
if i == 0 {
continue
objects := spanSize / c.size
tailWaste := spanSize - c.size*(spanSize/c.size)
maxWaste := float64((c.size-prevSize-1)*objects+tailWaste) / float64(spanSize)
+ alignBits := bits.TrailingZeros(uint(c.size))
+ for i := range minAligns {
+ if i > alignBits {
+ minAligns[i] = 0
+ } else if minAligns[i] == 0 {
+ minAligns[i] = c.size
+ }
+ }
prevSize = c.size
- fmt.Fprintf(w, "// %5d %9d %10d %7d %10d %8.2f%%\n", i, c.size, spanSize, objects, tailWaste, 100*maxWaste)
+ fmt.Fprintf(w, "// %5d %9d %10d %7d %10d %8.2f%% %9d\n", i, c.size, spanSize, objects, tailWaste, 100*maxWaste, 1<<alignBits)
+ }
+ fmt.Fprintf(w, "\n")
+
+ fmt.Fprintf(w, "// %-9s %-4s %-12s\n", "alignment", "bits", "min obj size")
+ for bits, size := range minAligns {
+ if size == 0 {
+ break
+ }
+ if bits+1 < len(minAligns) && size == minAligns[bits+1] {
+ continue
+ }
+ fmt.Fprintf(w, "// %9d %4d %12d\n", 1<<bits, bits, size)
}
fmt.Fprintf(w, "\n")
}
package runtime
-// class bytes/obj bytes/span objects tail waste max waste
-// 1 8 8192 1024 0 87.50%
-// 2 16 8192 512 0 43.75%
-// 3 24 8192 341 8 29.24%
-// 4 32 8192 256 0 21.88%
-// 5 48 8192 170 32 31.52%
-// 6 64 8192 128 0 23.44%
-// 7 80 8192 102 32 19.07%
-// 8 96 8192 85 32 15.95%
-// 9 112 8192 73 16 13.56%
-// 10 128 8192 64 0 11.72%
-// 11 144 8192 56 128 11.82%
-// 12 160 8192 51 32 9.73%
-// 13 176 8192 46 96 9.59%
-// 14 192 8192 42 128 9.25%
-// 15 208 8192 39 80 8.12%
-// 16 224 8192 36 128 8.15%
-// 17 240 8192 34 32 6.62%
-// 18 256 8192 32 0 5.86%
-// 19 288 8192 28 128 12.16%
-// 20 320 8192 25 192 11.80%
-// 21 352 8192 23 96 9.88%
-// 22 384 8192 21 128 9.51%
-// 23 416 8192 19 288 10.71%
-// 24 448 8192 18 128 8.37%
-// 25 480 8192 17 32 6.82%
-// 26 512 8192 16 0 6.05%
-// 27 576 8192 14 128 12.33%
-// 28 640 8192 12 512 15.48%
-// 29 704 8192 11 448 13.93%
-// 30 768 8192 10 512 13.94%
-// 31 896 8192 9 128 15.52%
-// 32 1024 8192 8 0 12.40%
-// 33 1152 8192 7 128 12.41%
-// 34 1280 8192 6 512 15.55%
-// 35 1408 16384 11 896 14.00%
-// 36 1536 8192 5 512 14.00%
-// 37 1792 16384 9 256 15.57%
-// 38 2048 8192 4 0 12.45%
-// 39 2304 16384 7 256 12.46%
-// 40 2688 8192 3 128 15.59%
-// 41 3072 24576 8 0 12.47%
-// 42 3200 16384 5 384 6.22%
-// 43 3456 24576 7 384 8.83%
-// 44 4096 8192 2 0 15.60%
-// 45 4864 24576 5 256 16.65%
-// 46 5376 16384 3 256 10.92%
-// 47 6144 24576 4 0 12.48%
-// 48 6528 32768 5 128 6.23%
-// 49 6784 40960 6 256 4.36%
-// 50 6912 49152 7 768 3.37%
-// 51 8192 8192 1 0 15.61%
-// 52 9472 57344 6 512 14.28%
-// 53 9728 49152 5 512 3.64%
-// 54 10240 40960 4 0 4.99%
-// 55 10880 32768 3 128 6.24%
-// 56 12288 24576 2 0 11.45%
-// 57 13568 40960 3 256 9.99%
-// 58 14336 57344 4 0 5.35%
-// 59 16384 16384 1 0 12.49%
-// 60 18432 73728 4 0 11.11%
-// 61 19072 57344 3 128 3.57%
-// 62 20480 40960 2 0 6.87%
-// 63 21760 65536 3 256 6.25%
-// 64 24576 24576 1 0 11.45%
-// 65 27264 81920 3 128 10.00%
-// 66 28672 57344 2 0 4.91%
-// 67 32768 32768 1 0 12.50%
+// class bytes/obj bytes/span objects tail waste max waste min align
+// 1 8 8192 1024 0 87.50% 8
+// 2 16 8192 512 0 43.75% 16
+// 3 24 8192 341 8 29.24% 8
+// 4 32 8192 256 0 21.88% 32
+// 5 48 8192 170 32 31.52% 16
+// 6 64 8192 128 0 23.44% 64
+// 7 80 8192 102 32 19.07% 16
+// 8 96 8192 85 32 15.95% 32
+// 9 112 8192 73 16 13.56% 16
+// 10 128 8192 64 0 11.72% 128
+// 11 144 8192 56 128 11.82% 16
+// 12 160 8192 51 32 9.73% 32
+// 13 176 8192 46 96 9.59% 16
+// 14 192 8192 42 128 9.25% 64
+// 15 208 8192 39 80 8.12% 16
+// 16 224 8192 36 128 8.15% 32
+// 17 240 8192 34 32 6.62% 16
+// 18 256 8192 32 0 5.86% 256
+// 19 288 8192 28 128 12.16% 32
+// 20 320 8192 25 192 11.80% 64
+// 21 352 8192 23 96 9.88% 32
+// 22 384 8192 21 128 9.51% 128
+// 23 416 8192 19 288 10.71% 32
+// 24 448 8192 18 128 8.37% 64
+// 25 480 8192 17 32 6.82% 32
+// 26 512 8192 16 0 6.05% 512
+// 27 576 8192 14 128 12.33% 64
+// 28 640 8192 12 512 15.48% 128
+// 29 704 8192 11 448 13.93% 64
+// 30 768 8192 10 512 13.94% 256
+// 31 896 8192 9 128 15.52% 128
+// 32 1024 8192 8 0 12.40% 1024
+// 33 1152 8192 7 128 12.41% 128
+// 34 1280 8192 6 512 15.55% 256
+// 35 1408 16384 11 896 14.00% 128
+// 36 1536 8192 5 512 14.00% 512
+// 37 1792 16384 9 256 15.57% 256
+// 38 2048 8192 4 0 12.45% 2048
+// 39 2304 16384 7 256 12.46% 256
+// 40 2688 8192 3 128 15.59% 128
+// 41 3072 24576 8 0 12.47% 1024
+// 42 3200 16384 5 384 6.22% 128
+// 43 3456 24576 7 384 8.83% 128
+// 44 4096 8192 2 0 15.60% 4096
+// 45 4864 24576 5 256 16.65% 256
+// 46 5376 16384 3 256 10.92% 256
+// 47 6144 24576 4 0 12.48% 2048
+// 48 6528 32768 5 128 6.23% 128
+// 49 6784 40960 6 256 4.36% 128
+// 50 6912 49152 7 768 3.37% 256
+// 51 8192 8192 1 0 15.61% 8192
+// 52 9472 57344 6 512 14.28% 256
+// 53 9728 49152 5 512 3.64% 512
+// 54 10240 40960 4 0 4.99% 2048
+// 55 10880 32768 3 128 6.24% 128
+// 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
+// 60 18432 73728 4 0 11.11% 2048
+// 61 19072 57344 3 128 3.57% 128
+// 62 20480 40960 2 0 6.87% 4096
+// 63 21760 65536 3 256 6.25% 256
+// 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
+
+// alignment bits min obj size
+// 8 3 8
+// 16 4 32
+// 32 5 256
+// 64 6 512
+// 128 7 768
+// 4096 12 28672
+// 32768 15 32768
const (
_MaxSmallSize = 32768