Ним: преимущество использования массива над последовательностью?

Из документов я знаю, что массивы Nim имеют фиксированную длину, определяемую во время компиляции, тогда как последовательности имеют переменную длину.

Я заметил, что у последовательностей больше встроенных инструментов. Например, в модуле sequtils map может принимать массив, но все равно возвращает последовательность, а all или any не работают с массивами. И я не вижу простого способа преобразовать последовательность фиксированного размера в массив.

Итак, мой вопрос: каковы преимущества использования массивов? Обеспечивают ли они более быстрый доступ?


person Adrien    schedule 10.12.2017    source источник


Ответы (1)


Nim seq на самом деле является указателем на динамический массив (который состоит из двух слов для длины и емкости последовательности плюс фактические данные).

seq требует другого уровня косвенности, дополнительного выделения кучи и имеет дополнительные накладные расходы (память, необходимая для хранения длины и емкости, а также любая «потерянная» память, которая в данный момент не используется). Итак, если вы точно знаете, сколько памяти вам нужно, вы можете сэкономить и время, и пространство, используя массив вместо последовательности.

person Reimer Behrends    schedule 10.12.2017