Go 中,除了使用缓存池,如何减少 slice 的动态分配?

比如,有这样一个函数:


func foo(n int) []byte {
bar := make([]byte, n)
...do some thing with b
return bar
}

bar := make([]byte, n)是一处动态内存分配,函数的其他部分不会再对bar的大小进行修改了。这种情况下有没有方法消除bar := make([]byte, n)这处动态内存分配?

已邀请:

andot - 野生程序员,20年+编程经验,近十年来,全身心专注于 Hprose 开源项目的开发和维护。

赞同来自: godonggua

定义结构体,作为字段,使用时创建的结构体对象只在创建它的函数中使用,可以避免逃逸到堆上,从而可以减少在堆上分配内存。

philc - https://github.com/philchia

赞同来自:

var bar = make([]byte, 1024)

func foo(n int) []byte {
...do some thing with bar
return bar[:n]
}

tonyluj - Go

赞同来自:

复用同一个 []byte,即拥有一个全局的 []byte 对象,比如通过结构体或者全局变量提供。
如果函数跨 goroutine 中使用,注意加锁。

要回复问题请先登录注册