显式定义变量地址(在Go中)

时间:2014-11-04 13:00:27

标签: pointers go memory-address

简化问题:

程序员是否可以跟踪变量的地址,以便变量的地址可以用作该变量的数据点?

原始问题:

我试图围绕如何使用Go中的指针来存储和引用变量。

作为一般原则,直接分配变量的地址是否有用?我可以想象一种情况,即数据可以在变量的物理(虚拟)地址中编码,而不一定是该变量的值。

例如,第1000位客户已经购买了500美元。我可以在1000位置存储一个值为500的整数|

我知道做这样的事情的常用方法是使用数组,其中位置999的变量对应于第1000个客户,但我的问题不是关于数组,而是关于直接分配地址。 / p>

假设我正在处理数十亿个对象。有没有一种简单的方法可以将地址用作对象数据的一部分,并将该位置存储的值作为不同的数据?

例如,地址135851851904的int值为46876,135851851905持有123498761等。我想在这一点上,数组或切片太大而无法有效。

顺便说一句,如果我的问题是由于误解,是否有人可以提供哪些资源可以用深入但可理解的细节来解释这个主题?我一直无法找到真正解释细节的主题资源。

1 个答案:

答案 0 :(得分:6)

  

直接分配变量的地址是否有用?

您可以使用unsafe包来实现这一目标,但您的想法是,除非您有一个具体且无法解决的用例,否则您不会这样做。

  

我可以在1000位置存储一个值为500的整数|

如前所述,有可能但选择一个任意地址不会让你走得太远,因为它甚至可能没有被映射。如果您写到这样的位置,您将获得访问冲突(并且您的程序将崩溃)。如果您碰巧遇到有效的地址编号,您可能会覆盖您的程序需要运行的其他数据。

  

是否有一种简单的方法可以将地址用作对象数据的一部分,并将该位置存储的值作为不同的数据?

一般没有。

如果你设法构建某种代数结构,在你自己的指针算术在一组有限的地址中定义的操作中,你可以保证它们始终是一个有效的虚拟内存段然后是,但它会失败使用垃圾收集语言的目的。另外,阅读这样的程序真是太棒了。