Я играл с типизированными массивами в JavaScript.
var buffer = new ArrayBuffer(16);
var int32View = new Int32Array(buffer);
Я предполагаю, что нормальные массивы ([1, 257, true]) в JavaScript имеют низкую производительность, потому что их значения могут быть любого типа, поэтому достижение смещения в памяти не является тривиальным.
Первоначально я думал, что индексы JavaScript-массива работают так же, как объекты (поскольку они имеют много общего), и были хэш-карта, требующая поиска на основе хэша. Но я не нашел достоверной информации, подтверждающей это.
Итак, я бы предположил, почему Typed Arrays работают так хорошо, потому что они работают как обычные массивы на C, где они всегда печатаются. Учитывая пример исходного кода выше и желающий получить 10-е значение в типизированном массиве...
var value = int32View[10];
- Тип
Int32, поэтому каждое значение должно состоять из32бит или4байтов. - Подстрочный индекс
10. - Таким образом, местоположение в памяти этого значения
<array offset> + (4 * 10), а затем прочитайте4bytes, чтобы получить общее значение.
Я просто хочу подтвердить свои предположения. Я думаю об этом правильно, а если нет, проконсультируйтесь.
Я проверил источник V8, чтобы узнать, могу ли я ответить на него сам, но мой C ржавый, и я не слишком хорошо знаком с С++.