Warum unterscheidet sich die Schnittkapazität mit ungeraden Zahlen vom Verhalten mit geraden Zahlen

Ich habe festgestellt, dass sich die Kapazität von Slices anders verhält, wenn die Kapazität eine ungerade Zahl ist. Genauer gesagt: Wenn einem Slice ein Element hinzugefügt wird, beträgt die Kapazität des Slice verdoppelt als die ursprüngliche Kapazität eine gerade Zahl war. Aber wenn die ursprüngliche Kapazität eine ungerade Zahl war, ist die Kapazität um eins erhöht und dann verdoppelt. Beispiel

s := make([]int, 28, 28)
s = append(s, 1) 
fmt.Println("len=", len(s), " cap=", cap(s)) // len = len + 1, cap = 2 * cap


pri := make([]int, 27, 27)
pri = append(pri, 1)
fmt.Println("len=", len(pri), " cap=", cap(pri)) // len = len + 1, cap = 2 * (cap + 1)  

Angenommen, dies ist kein Fehler. Was ist der Grund für dieses Verhalten?

Link zum Spielplatz:http: //play.golang.org/p/wfmdobgCU

Antworten auf die Frage(2)

Ihre Antwort auf die Frage