-gcflags=-m will answer your question (hint, if the arguments to make are 
not constants, the compiler cannot be sure that the allocation will fit on 
the stack).

However, with the SSA compiler, the arguments could be deduced to be 
constant, and this optimisation could be improved. Please consider logging 
an issue.

On Wednesday, 28 September 2016 22:26:47 UTC+10, 刘桂祥 wrote:
>
> //  example1.go
> packge main
>
> func main() {
>          s := make([]byte, 1024, 1024)
>          _ = s
> }
>
> s will be allocated in stack and lookup assembl 
> <http://www.baidu.com/link?url=bAdrFLMvrfjd9qsjbYka0iztFO6qpJRgzpG6mzu9MrOtl8wUl4TmNVbQ19uYLjU75_lCRcNmRHuiocgN4N9QITmue5XAaqLYQOh9YQzpGi_>e
>  
> code  not call runtime.makeslice
>
> // example2.go
> packge main
>
> func main() {
>          cap := 1024
>          s := make([]byte, 1024, cap)
>          _ = s
> }
>
> s will be allocated in heap and lookup assemble code there is 
> runtime.makeslice   why this ???
>
> // example3.go
> package main
>
> func main() {
>        a := 100
>        if a>1 {
>              a = 1000
>        }
>        b := interface{}(a)
>        _ = b
> }
>
> 0x0000 00000 (example1.go:3) TEXT "".main(SB), $64-0
> 0x0000 00000 (example1.go:3) MOVQ (TLS), CX
> 0x0009 00009 (example1.go:3) CMPQ SP, 16(CX)
> 0x000d 00013 (example1.go:3) JLS 93
> 0x000f 00015 (example1.go:3) SUBQ $64, SP
> 0x0013 00019 (example1.go:3) MOVQ BP, 56(SP)
> 0x0018 00024 (example1.go:3) LEAQ 56(SP), BP
> 0x001d 00029 (example1.go:3) FUNCDATA $0, gclocals·33cdeccccebe80329
> f1fdbee7f5874cb(SB)
> 0x001d 00029 (example1.go:3) FUNCDATA $1, gclocals·33cdeccccebe80329
> f1fdbee7f5874cb(SB)
> 0x001d 00029 (example1.go:8) MOVQ $1000, "".autotmp_0+48(SP)
> 0x0026 00038 (example1.go:8) MOVQ $0, "".autotmp_1+40(SP)
> 0x002f 00047 (example1.go:8) LEAQ type.int(SB), AX
> 0x0036 00054 (example1.go:8) MOVQ AX, (SP)
> 0x003a 00058 (example1.go:8) LEAQ "".autotmp_0+48(SP), AX
> 0x003f 00063 (example1.go:8) MOVQ AX, 8(SP)
> 0x0044 00068 (example1.go:8) LEAQ "".autotmp_1+40(SP), AX
> 0x0049 00073 (example1.go:8) MOVQ AX, 16(SP)
> 0x004e 00078 (example1.go:8) PCDATA $0, $0
> 0x004e 00078 (example1.go:8) CALL runtime.convT2E(SB)
> 0x0053 00083 (example1.go:10) MOVQ 56(SP), BP
> 0x0058 00088 (example1.go:10) ADDQ $64, SP
> 0x005c 00092 (example1.go:10) RET
> 0x005d 00093 (example1.go:10) NOP
> 0x005d 00093 (example1.go:3) CALL runtime.morestack_noctxt(SB)
> 0x0062 00098 (example1.go:3) JMP 0
>
>
> lookup the assemble code and see the compiler is very clever to opt that 
> but in example2.go why don't do this 
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to