首页 > 解决方案 > Go 如何保证元素指针对数组和切片有效?

问题描述

当您在数组或切片上使用索引器作为回报时,您将获得变量,以便您可以获取它的地址。我想知道这怎么可能,因为数组/切片可能比目标变量嵌套更多:

// ptr declaration here
{
  // array declaration here
  ptr = &array[0];
}

在数组的情况下,我看到一个问题,即数据在堆栈上,使用切片,在堆上分配它并不能自动解决问题,因为 GC 可以删除整个切片,除非获取元素链接到切片本身的地址(从而防止释放内存)。

示例:当不能保证指针的有效性时会发生什么——假设我的数组是颜色的集合。我选择一个元素,获取它的地址,整个数组被删除(因为它超出了范围),我检查了元素的值,它是 3.14。或“你好世界”。或者也许green。由于无法保证它可能是位于给定地址的任何东西。

标签: arraysgomemoryslice

解决方案


Go 编译器和 Go 垃圾收集器保证在不再使用之前不会释放内存。

要学习垃圾收集的基础知识,Go 团队推荐了《垃圾收集手册:自动内存管理的艺术》

请参阅Go 博客:Getting to Go:Go 的垃圾收集器之旅了解一些历史。


推荐阅读