|
|
|
|
|
by masklinn
195 days ago
|
|
> Go won’t put large allocations on the stack even if escape analysis would permit it Depends what you mean by “large”. As of 1.24 Go will put slices several KB into the stack frame: make([]byte, 65536)
Goes on the stack if it does not escape (you can see Go request a large stack frame) make([]byte, 65537)
goes on the heap (Go calls runtime.makeslice).Interestingly arrays have a different limit: they respect MaxStackVarSize, which was lowered from 10MB to 128 KB in 1.24. If you use indexed slice literals gc does not even check and you can create megabyte-sized slices on the stack. |
|