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

2016-10-14 17:55发布

比如,有这样一个函数:

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)这处动态内存分配?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答

申明一个生命周期在函数foo以外的slice,每次复用这个slice(前提是你需要保证这样没问题)

如果不是,那么别想多了。

类似于redis的内存管理,初始化一个大slice,每次使用大slice的一部分

这个问题只能从你自身的需求来讲,每次调用foo如果期望一个独立的slice返回,那么只能这么办了。如果不是这样,可以考虑以下方法:

这种问题是很单纯的自己想多的。

如果是Read Only 的可以使用楼上的方法。

段曼 - 我很好
7楼-- · 2016-10-14 17:44

可以bar := make([]byte, n, capacity),预先指定一个容量。

一周热门 更多>