Я видел небольшие утилиты на разных языках, которые для требуемой емкости массива будут вычислять "идеальный размер" для массива. Эти подпрограммы обычно используются, когда для выделенного массива все равно, чем емкость. Они обычно работают путем вычисления длины массива, так что размер выделенного блока (в байтах) плюс служебные данные распределения памяти - это наименьшая точная мощность 2, необходимая для заданной емкости. В зависимости от схемы управления памятью это может значительно уменьшить фрагментацию памяти по мере выделения блоков памяти и затем освобождения.
JavaScript позволяет строить массивы с предопределенной длиной. Соответствует ли концепция "идеального размера" ? Я могу думать о четырех аргументах против него (в определенном порядке):
- Системы управления памятью JS работают таким образом, чтобы не использовать такую стратегию.
- JS-механизмы уже внедряют такую стратегию калибровки
- JS двигатели действительно не держат массивы в качестве непрерывных блоков памяти, так что вся идея спорна (для типизированных массивов, за исключением)
- Идея применяется, но управление памятью настолько зависит от двигателя, что ни одна стратегия "идеального размера" не будет работоспособной.
С другой стороны, возможно, все эти аргументы ошибочны, и небольшая утилита действительно будет эффективной (как в: сделать измеримую разницу в производительности script).
Итак: Можно ли написать эффективную процедуру "идеального размера" для массивов JavaScript?