gpt4 book ai didi

pointers - Go和C++的指针区别,gc后指针会变吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:16 26 4
gpt4 key购买 nike

指针在 Go 和 C++ 中的工作方式有区别吗,在 gc 之后指针会改变吗?

我想知道Go中指针和内存的具体关系。如有相关资料或源码说明,万分感谢。

最佳答案

语言规范没有说明指针是否应该保持不变。这意味着您不应依赖/以此为基础。

您可以保证,如果指针在垃圾回收周期后发生变化,或者如果运行时由于内存分配/释放而更改它们,您变量中的指针将被更新以反射(reflect)这些变化。

unsafe.Pointer 的文档中有一个提示指针可能改变:

A uintptr is an integer, not a reference. Converting a Pointer to a uintptr creates an integer value with no pointer semantics. Even if a uintptr holds the address of some object, the garbage collector will not update that uintptr's value if the object moves, nor will that uintptr keep the object from being reclaimed.

在实践中,垃圾收集器不会四处走动并一直更改指针,那将是不必要的开销。但如果大量对象被释放并压缩内存,或者存在释放未使用内存的“压力”(例如,由于调用 debug.FreeOSMemory() ),它可能会重新排序内存中的对象。

关于pointers - Go和C++的指针区别,gc后指针会变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com