提问人:moo.duwayne 提问时间:8/29/2023 更新时间:8/29/2023 访问量:72
保留引用,但不将数据分配给实际变量是否安全?[已结束]
Is it safe to keep reference, but not assigning data to an actual variable? [closed]
问:
我想在切片中保留引用列表,但我无法在线调用任何资源来解释在不分配给变量的情况下保留引用是否安全?
我的意思是,操作系统是否有可能在引用的地址中写入程序员不期望的内容?
下面是一个示例代码:
type ListItem [8]uint64
list := make([]*ListItem, 0)
list = append(list, &ListChunk{})
list = append(list, &ListChunk{})
list = append(list, &ListChunk{})
换句话说,无论运行多长时间,是否保证名为切片中的项在程序运行时保持不变?list
答:
-3赞
Achref Nasri
8/29/2023
#1
在你的情况下,可能不是(引用将保持不变),但这也取决于你的程序对它做了什么:
Go 运行时在程序的生命周期内不会更改存储在切片中的引用(指针),但在一个条件下: -您不会在函数中重新分配切片或其元素指针([8]uint64 的数组)。只要不为切片的元素重新分配新值,引用将保持不变。
评论
0赞
moo.duwayne
8/30/2023
对不起,我的英语不好,所以这是我的理解:重新分配你的意思是执行或在程序结束时,对吧?因此,在第一种情况下,切片中的整个项目将通过 gc 获得自由,而在第二种情况下,只有 list[1] 将获得自由。右?list = make([]*ListItem, 0)
list[1] = &ListChunk{}
评论