Arrays 数组是否以所有语言连续存储?

Arrays 数组是否以所有语言连续存储?,arrays,programming-languages,Arrays,Programming Languages,我最近读了一篇博客,其中对数组数据的连续存储(特别是在Go中)做了大量论述,但我的理解是,根据定义,数组数据是连续存储的。至少我所有的算法和数据结构研究都让我相信了这一点 所以我的问题是,数组数据在所有编程语言中都是连续存储的吗?而且,我特别想谈谈像整数这样的原语(或者在Java中,我可以有一个对象数组,对对象的引用是否连续存储在内存中?我知道对象本身可以在任何地方)。通常这低于语言抽象级别,因此没有明确的要求。但由于性能原因,任何实际实现都可能会这样做(四舍五入到字数)。当然,它指的是虚拟内存

我最近读了一篇博客,其中对数组数据的连续存储(特别是在Go中)做了大量论述,但我的理解是,根据定义,数组数据是连续存储的。至少我所有的算法和数据结构研究都让我相信了这一点


所以我的问题是,数组数据在所有编程语言中都是连续存储的吗?而且,我特别想谈谈像整数这样的原语(或者在Java中,我可以有一个对象数组,对对象的引用是否连续存储在内存中?我知道对象本身可以在任何地方)。

通常这低于语言抽象级别,因此没有明确的要求。但由于性能原因,任何实际实现都可能会这样做(四舍五入到字数)。当然,它指的是虚拟内存,因为内核可以提供程序本身视为连续的非连续空间,这取决于您在语言上定义为“数组”的内容,尽管数组的传统含义与连续元素的放置有关

例如,在
JavaScript
中,数组实际上是哈希表,这意味着数据不是连续存储的,而是基于其索引键(使用哈希函数)进行哈希处理,以将值存储在不同的地址(询问),这只是一个示例(事实上,我认为在动态语言中,将数组作为哈希表是一种常见现象)


我想这个答案是否定的。

对于java,已经有了答案。只要指定的行为发生,就没有规则要求数组元素以连续或任何特定顺序存储。C语言通常要求一维数组的连续顺序,因此指针语义如下可能有几种语言使用数组“ARARYLIST”类型的机制,数组可以由多个非连续块构成。许多语言规范认为这是实现细节(什么是内存?)我也不能保证,但在实际的实现中通常是这样的。这在我明年要发明的语言中是不正确的。只是为了激怒你。