go slice array allocation gotcha
February 21, 2017
general
blog
Why is memory is allocated differently when you preallocate a slice and an array in golang.
slicey := make([]byte, 1024*1024)
top
shows there is no extra memory allocated while a program with that slice is running.
arr := [1024*1024]byte{}
top
shows that memory is allocated while that program is running.
I am baffled why there is difference when slice also has a backing array that need to be initialized?
Program you can run
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("start")
time.Sleep(10 * time.Second)
fmt.Println("go!")
slicey := make([]byte, 1024*1024)
time.Sleep(time.Minute)
}
go run
and check top
Note - I ran this on Mac OSX El Capitan