v8中的内存结构和js类型的内存结构并不完全相同。会存在一个类型有多种内存结构的情况。 比如number在v8中有 SMI HeapNumber MultiNumber等类型表现形式。string在拼接字符串的时候会使用一个包含两个内存地址的类,保存原来两者的内存地址来实现拼接操作。
v8或者其他JS虚拟机的实现都是有差别的。
js中表现出来的类的结构和内存结构是ECMAScript标准所制定的。与v8的内存结构是无关的。
如上述所说的V8中number以SMI类型存储则会直接存到地址里。HeapNubmer就是在内存中存指针地址了。但是我们用的时候,并不需要操心V8是存的值还是指针,在JS虚拟机中的表现,number就是值传递而不会发生引用传递。
但是通过对V8内存结构的研究,可以写出更好的代码。