There is a option -smallframes that seems to be intended for conservative use cases. Below are the related configs and a test at what point they escape (+1).
// -smallframes
// ir.MaxStackVarSize = 64 * 1024
// ir.MaxImplicitStackVarSize = 16 * 1024
a := [64 * 1024 +1]byte{}
b := make([]byte, 0, 16 * 1024 +1)
// default
// MaxStackVarSize = int64(128 * 1024)
// MaxImplicitStackVarSize = int64(64 * 1024)
c := [128 * 1024 +1]byte{}
d := make([]byte, 0, 64 * 1024 +1)
Not sure how to verify this, but the assumption you can allocate megabytes on the stack seems wrong. The output of the escape analysis for arrays is different then the make statement: test/test.go:36:2: moved to heap: c
Maybe an overlook because it is a bit sneaky?
> Not sure how to verify this, but the assumption you can allocate megabytes on the stack seems wrong.