Go Assembly 示例: noescape

dummy操作,主要为了noescape, 可以通过go compile生成

#include "textflag.h"
TEXT ·noescape(SB),NOSPLIT,$0-48
        MOVQ    d_base+0(FP),   AX
        MOVQ    AX,     b_base+24(FP)
        MOVQ    d_len+8(FP),    AX
        MOVQ    AX,     b_len+32(FP)
        MOVQ    d_cap+16(FP),AX
        MOVQ    AX,     b_cap+40(FP)
        RET
package noescape
//此处使用go编译器的指示
//go:noescape
func noescape(d []byte) (b []byte)
func test() int {
    var buf [1024]byte

go:noescape可以确保data分配在栈上

    data := noescape(buf[:])

do something in data 这样可以确保buf一定分配在函数test的函数栈上

    return len(data)
}