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)
这处动态内存分配?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个问题只能从你自身的需求来讲,每次调用foo如果期望一个独立的slice返回,那么只能这么办了。如果不是这样,可以考虑以下方法:
申明一个生命周期在函数foo以外的slice,每次复用这个slice(前提是你需要保证这样没问题)
类似于redis的内存管理,初始化一个大slice,每次使用大slice的一部分
可以
bar := make([]byte, n, capacity)
,预先指定一个容量。这种问题是很单纯的自己想多的。
如果是Read Only 的可以使用楼上的方法。
如果不是,那么别想多了。