2014-12-19 4 views
6

Недавно я читал блог, в котором большое внимание было уделено массивам данных (в частности, в Go), но я понял, что по определению данные массива хранятся смежно. По крайней мере, это все, что изучают мои алгоритмы и структуры данных, побудило меня поверить.Являются ли массивы сохраненными на всех языках?

Так что мой вопрос в том, хранятся ли массивные данные на всех языках программирования? И, в частности, я хочу поговорить о таких примитивах, как целые числа (или в случае Java, где у меня может быть массив объектов, являются ли ссылки на объекты, хранящиеся в памяти в памяти? Я знаю, что сами объекты могут быть где угодно).

+0

для java уже есть ответ https://stackoverflow.com/questions/10224888/java-are-1-d-arrays-always-contiguous-in-memory – DRC

+0

Для Java нет правила хранить элементы массива смежно или в каком-либо конкретном порядке, при условии, что указанное поведение происходит. Языки C обычно требуют непрерывного порядка для одномерных массивов, чтобы семантика указателя была гарантирована. Вероятно, существует несколько языков, которые используют механизм типа ArrayList для массивов, а массивы могут быть построены из нескольких несмежных блоков. –

+2

Многие спецификации языка рассматривают это как деталь реализации (что такое память?) И не гарантируют ее, но обычно это происходит в реальных реализациях. – zch

ответ

0

Обычно это ниже уровня абстракции языка, поэтому нет явного требования об этом. но любая реальная реализация, вероятно, делает это (с округлением до размера слова) из-за производительности. это относится к виртуальной памяти, конечно, потому что ядро ​​может обеспечить несмежное пространство, которое сама программа видит как непрерывная.

3

Это зависит от того, что вы определяете как «массив» на языке, хотя традиционное значение массива имеет делать с прилежащим размещением элементов.

Например, в JavaScript, массивы фактически являются хэш-таблицы, что означает, что данные не хранятся в смежно, но хэшируются на основе его индексации ключей (с использованием хэш-функции) для хранения значений в различных адресов (под сомнение here), и это только пример (на самом деле, я думаю, что в динамических языках общее явление имеет массивы как хеш-таблицы).

Я полагаю, что этот вопрос отвечает на ваш вопрос no.

Смежные вопросы