【问题标题】:explicitly defining variable addresses (in Go) [closed]显式定义变量地址(在 Go 中)[关闭]
【发布时间】:2014-12-31 09:08:36
【问题描述】:

简化问题:

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

原问题:

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

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

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

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

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

例如,地址 135851851904 的 int 的值是 46876,135851851905 的值是 123498761,等等。我想此时数组或切片会太大而无法高效。

顺便说一句,如果我的问题是由于误解引起的,是否有人可以提供资源来深入解释该主题,但可以理解的细节?我一直找不到能真正解释细节的关于该主题的好资源。

【问题讨论】:

  • 这个问题太笼统了。对于这种格式,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
  • @peterSO 你能推荐一个我可以更详细地探讨这个话题的来源吗?
  • What topics can I ask about here?:要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件.相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • @peterSO 很公平。我想我现在知道 SO 代表什么了,哈哈。

标签: pointers go memory-address


【解决方案1】:

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

您可以使用unsafe 包来实现这一点,但我们的想法是,除非您有一个具体且无法解决的用例需要它,否则您不要这样做。

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

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

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

一般不会。

如果您设法构建了某种代数结构,该结构在您自己的指针算术定义在有限地址集中的操作下封闭,您可以保证始终是有效的虚拟内存段,那么是的,但它打败了使用垃圾收集语言的目的。此外,阅读这样的程序将是地狱。

【讨论】:

  • 这听起来很可怕。我特别喜欢你对我问题的解释,很高兴你明白我在问什么。
  • 另外,Go 有一个运行时可以移动东西,所以不能保证它不会被随机覆盖。
猜你喜欢
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多