2014-11-04 34 views
1

簡化問題:明確定義變量地址(圍棋)

才適合程序員跟蹤變量的地址,讓一個變量的地址可以作爲數據的該變量的一個點?

原題:

我試圖總結我的周圍變量是如何存儲和使用指針在圍棋地址引用頭。

作爲一般原則,直接指定變量的地址有用嗎?我可以想象一種情況,即數據可以在變量的物理(虛擬)地址中進行編碼,而不一定是該變量的值。

例如,第1000位顧客購買了500美元。我可以在位置1000存儲一個值爲500的整數嗎?

我知道,這樣做的常見方式是一個數組,其中在999位置的變量對應於第1000個客戶,但我的問題是不是數組,它是關於直接分配地址。

假設我正在處理數十億個對象。有沒有一種簡單的方法可以將地址用作對象數據的一部分,並將存儲在該位置的值作爲不同的數據?例如,

例如,地址爲135851851904的int值爲46876,135851851905爲123498761等。我想在這一點上,數組或切片太大而不能高效。

順便說一句,如果因誤會我的問題,是有資源的人可以提供這也解釋了在深的話題,但可以理解的細節?我一直無法找到真正解釋細節的主題的好資源。

+1

這個問題太廣泛了。對於這種格式,好的答案太長了。請添加詳細信息以縮小答案集或隔離幾個段落中可以回答的問題。 – peterSO 2014-11-04 13:14:00

+0

@peterSO你能推薦一個資源,我可以更詳細地探討這個話題嗎? – ridthyself 2014-11-04 13:22:06

+0

[我可以在這裏詢問什麼主題?](http://stackoverflow.com/help/on-topic):要求我們推薦或查找書籍,工具,軟件庫,教程或其他非現場資源的問題是因爲他們傾向於吸引自以爲是的答案和垃圾郵件,所以不適合堆棧溢出。相反,請描述問題以及到目前爲止解決問題所做的工作。 – peterSO 2014-11-04 13:28:59

回答

6

是它曾經有用的直接分配變量的地址?

可以使用unsafe包來實現這一點,但這個想法是,你不這樣做,除非你有一個具體否則無法解決的用例需要它。

我可以在位置1000存儲一個整數值爲500嗎?

如前所述,雖然可能,但選擇一個任意地址不會讓你感覺太遠,因爲它甚至可能不會被映射。如果你寫這樣的位置,你會得到一個訪問衝突(並且你的程序會崩潰)。如果碰巧遇到有效的地址號碼,您可能會覆蓋您的程序需要運行的其他數據。

是否有一種簡單的方法將地址用作對象上的數據的一部分,並將該地址處的值存儲爲不同的數據?

一般沒有。

如果你設法建立某種代數結構封閉在你自己的指針算法定義在有限的地址集中,你可以保證永遠是一個有效的虛擬內存段的操作,那麼是的,但它會失敗使用垃圾收集語言的目的。另外,閱讀這樣一個程序將會很糟糕。

+0

這聽起來很可怕。我特別喜歡你對我的問題的解釋,我很高興你明白我在問什麼。 – ridthyself 2014-11-04 13:29:06

+1

另外,Go有一個運行時現在可以移動的東西,所以不能保證它不會被隨機覆蓋。 – LinearZoetrope 2014-11-04 21:28:29