golang的slice相当于对一段连续空间的引用。当底层数组的前面一段空间没有被任何slice引用时,这段连续空间可以被释放。用一个小实验证明这一点:
package main |
编译运行之后,可以看到内存使用量在a0
被释放之后就减少了,这说明a0
被释放之后,a
的底层数组的前面没有被slice引用的部分的空间就会被回收了。
因此在go语言里用slice实现队列不会导致内存泄漏(前提是前面没有被slice引用的部分也没有被其他地方引用)。pop的时候直接a = a[1:]
即可。
golang的slice相当于对一段连续空间的引用。当底层数组的前面一段空间没有被任何slice引用时,这段连续空间可以被释放。用一个小实验证明这一点:
package main |
编译运行之后,可以看到内存使用量在a0
被释放之后就减少了,这说明a0
被释放之后,a
的底层数组的前面没有被slice引用的部分的空间就会被回收了。
因此在go语言里用slice实现队列不会导致内存泄漏(前提是前面没有被slice引用的部分也没有被其他地方引用)。pop的时候直接a = a[1:]
即可。
Except as otherwise noted, this blog is licensed under CC BY-SA 4.0 License.
©2021-
searchstar
|
pv
|
uv
Theme Tree
by Wu Jun
Powered by Hexo