V8 数据结构
记录下V8的数据结构。
ArrayBuffer
用于表示通用的原始二进制数据缓冲区。其为字节数组(bytearray)。不能直接操作ArrayBuffer内容,而是要通过类型化数组对象或DataView对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区内容。
创建ArrayBuffer
1 | // 创建8字节缓冲区,并使用Int32Array视图引用 |
操作ArrayBuffer
要操作ArrayBuffer内容,需要使用视图对象。视图对象不存储任何数据,它只是对ArrayBuffer中字节的解释。例如Uint8Array将每个字节视为独立的数字。
1 | let buffer = new ArrayBuffer(16); |
DataView
DataView是一个特殊的“无类型”视图,其允许在任何偏移量以任何格式访问数据。与类型化数组不同,DataView的构造函数不指定格式,而是在方法调用时指定。
1 | let buffer = new Uint8Array([255, 255, 255, 255]).buffer; |
DataView非常适合在同一缓冲区中存储混合格式数据。
JSArray
JSArray对象的结构如下:
1 | struct JSArray { |
map可以看作JSArray对象的vtable(JS Prototype)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Small Utopia!
评论