V8 BigInt размер в памяти? - PullRequest
       11

V8 BigInt размер в памяти?

0 голосов
/ 21 января 2019

Есть ли способ получить объем занятой памяти в байтах чисел BigInt?

let a = BigInt(99999n)
console.log(a.length) // yield undefined

Спасибо

1 Ответ

0 голосов
/ 22 января 2019

V8 разработчик здесь. Как правило, нет способа определить объем занятой памяти объекта, и BigInts не являются исключением. Почему вы хотите получить к нему доступ?

Что касается внутренней реализации в V8, BigInt имеет маленький заголовок объекта (в настоящее время два размера указателя; это может измениться со временем), а затем бит для каждого бита BigInt, округленный до кратных размер указателя. 99999 - это 17-битное число, поэтому в вашем примере let a = 99999nBigInt(99999n)» лишнее!) Выделенный BigInt будет использовать (2 + Math.ceil(17/64)) * 64 bits === 24 bytes в 64-битной системе.

Может иметь или не иметь смысла добавлять связанные с длиной свойства или методы (.bitLength?) В BigInts в будущем. Если у вас есть сценарий использования, я предлагаю вам подать проблему на https://github.com/tc39/proposal-bigint/issues, чтобы ее можно было обсудить.

...