Чтобы знать наверняка, вам нужно измерить . Основываясь на машинных инструкциях, которые может сгенерировать компилятор, я бы попробовал массив, затем список.
Для доступа к элементу массива требуется проверка границ, адресная арифметика и загрузка
Доступ к заголовку списка требует загрузки, проверки пустого списка и загрузки с известным смещением времени компиляции.
Сведения о том, что быстрее, вероятно, зависят от вашего приложения и того, что еще происходит на вашем компьютере. Они также зависят от типа элементов; например, если они являются числами с плавающей точкой, ocamlopt
может быть достаточно умным, чтобы создать распакованный массив, который сохранит вам уровень косвенности.
Другие распространенные структуры данных, такие как хеш-таблицы или сбалансированные деревья, обычно требуют, чтобы вы где-то выделяли контекст, чтобы отслеживать, где вы находитесь. Для массива отслеживание требует только целочисленного индекса; со списком, отслеживание требует одного указателя. Я думаю, что это будет трудно превзойти в другой структуре данных.
Наконец, обратите внимание, что может быть только один компилятор OCaml, но он имеет два внутренних конца: байт-код и собственный код. Естественно, если вы заботитесь об этом уровне производительности, вы используете версию с нативным кодом ocamlopt
. Правильно?
Пожалуйста, проведите измерения и отредактируйте результаты в своем вопросе.