当您在数组或切片上使用indexer时,返回的是变量,因此可以获取它的地址。我想知道这是怎么可能的,因为数组/片可能比目标变量嵌套得更多:
// ptr declaration here
{
// array declaration here
ptr = &array[0];
}
在数组的情况下,我看到了一个问题,数据是堆栈上的,使用slice,在堆上分配数据并不能自动解决问题,因为GC可能会删除整个slice,除非将元素的地址链接到slice本身(从而阻止释放内存)。
例如:当不能保证指针的有效性时会发生什么--假设我的数组是一个颜色集合。我选择一个元素,取它的地址,整个数组被删除(因为它超出了范围),我检查了元素的值,它是3.14。或者“你好,世界”。或者是green
__。因为不能保证它可能是位于给定地址的任何东西。
发布于 2018-07-30 03:09:16
Go编译器和Go垃圾收集器保证内存在不再使用之前不会被释放。
为了学习垃圾收集的基础知识,Go团队推荐The Garbage Collection Handbook: The Art of Automatic Memory Management。
有关历史记录,请参阅The Go Blog: Getting to Go: The Journey of Go's Garbage Collector。
https://stackoverflow.com/questions/51582848
复制相似问题