2014-12-19 38 views
6

我正在讀一本博客最近,在關於面連續(特別是在圍棋)存儲陣列的數據一個大問題,但它是我的理解是,根據定義,數組數據連續存儲。至少這是我所有的算法和數據結構研究讓我相信的。數組是否連續存儲在所有語言中?

所以我的問題是,被連續存儲在所有的編程語言數組數據?而且,特別是我想談的像整數原語(或在那裏我可以有對象數組的Java的情況下,是連續存儲在內存中的對象的引用?我知道,對象本身可以在任何地方)。

+0

對於java已經有一個答案https://stackoverflow.com/questions/10224888/java-are-1-d-arrays-always-contiguous-in-memory – DRC 2014-12-19 00:19:50

+0

對於Java沒有規則,數組元素被存儲連續地或以任何特定的順序,只要指定的行爲發生。 C語言通常要求單維數組的連續順序,以便確保指針語義。可能有幾種語言對數組使用「ArrayList」類型機制,並且數組可能由多個不連續的塊構成。 – 2014-12-19 00:57:47

+2

許多語言規範認爲這是實現細節(什麼是內存?)並不能保證它,但在實際實現中通常是這種情況。 – zch 2014-12-19 00:58:15

回答

0

這通常是低於語言的抽象水平,從而有關於沒有明確的要求。但是由於性能的原因,任何真實生活的實現可能都會這樣做(四捨五入到字的大小)。它指的是當然的虛擬內存,因爲內核可以提供非連續空間,該方案本身看爲連續

3

這取決於你定義爲一個語言「陣列」,雖然數組的傳統意義上具有與連續元素放置有關。

例如,在JavaScript中,數組實際上是散列表,這意味着數據不是連續存儲的,而是基於其索引鍵散列(使用散列函數)以將值存儲在不同的地址中(詢問here ),這只是一個例子(實際上,我認爲在動態語言中,將數組作爲哈希表是一種常見現象)。

我想,這其中是否以沒有你的問題。

相關問題