Использует ли Uint8Array буфер общей памяти в Node и Browser? - PullRequest
0 голосов
/ 13 февраля 2020

Если я создаю 2-байтовый буфер, базовый ArrayBuffer иногда составляет 8 КБ. Но если я создаю 2-байтовый Uint8Array, есть ли риск, что базовый ArrayBuffer будет больше или я всегда могу рассчитывать на то, что он будет 2 байта.

Пример кода будет new Uint8Array(2).buffer.byteLength.

1 Ответ

0 голосов
/ 13 февраля 2020

Да, вы можете положиться на new Uint8Array( length ) для создания ArrayBuffer с byteLength length.

Интересующие нас шаги для создания new Uint8Array( length ):

Теперь, хотя это верно для Uint8Array, это не для всех TypedArrays.

Важной частью здесь является мой четвертый пункт, где elementSize определяется из этой таблицы , поскольку это значение будет использоваться в качестве множителя для последнего аргумента byteLength.

test( Uint8Array ); // 2
test( Uint16Array ); // 4
test( Float64Array ); // 16

function test( constructor ) {
  console.log( constructor.name, new constructor( 2 ).buffer.byteLength );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...