登录
首页 >  Golang >  Go问答

GC 是否处理数组的未指向部分

来源:stackoverflow

时间:2024-04-13 17:03:35 337浏览 收藏

你在学习Golang相关的知识吗?本文《GC 是否处理数组的未指向部分》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

假设我们以这种方式创建了一个切片:

arr := make([]byte, 0, 10)
arr = append(arr, []byte{1, 1, 1}...)

然后我们要释放 7 个尾部字节:

arr = arr[:len(arr)]

我们让切片的尾部无法到达。 gc 会在下一次扫描迭代中简单地释放该内存吗?或者底层数组会发生其他事情(例如 copy(),内存根本不会被释放)?


解决方案


你不能; go gc 不执行部分释放。这 10 个字节将保持分配状态,直到没有对这 10 个字节的任何部分的引用。

例如,要释放尾部字节,

package main

import "fmt"

func main() {
    arr := make([]byte, 0, 10)
    arr = append(arr, []byte{1, 1, 1}...)

    // free tail bytes:
    fmt.println(len(arr), cap(arr), &arr[0], arr)
    arr = append(make([]byte, 0, len(arr)), arr...)
    fmt.println(len(arr), cap(arr), &arr[0], arr)
}

演示:https://play.golang.org/p/l6cbiBoMf4j

输出:

3 10 0x414020 [1 1 1]
3 3 0x414050 [1 1 1]

The Go Blog: Go Slices: usage and internals

终于介绍完啦!小伙伴们,这篇关于《GC 是否处理数组的未指向部分》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>