所以turns out v8数组是连续存储的,如果数组在内存中超过当前的插槽,它将被重新分配在内存中的不同位置。
这让我想知道如何指针。如果这是在C中并且您重新分配了数组you have to get a reference to a new pointer!。这意味着使用旧指针的所有代码现在都必须使用新指针。
这让我想知道如V8这样的JIT编译器如何处理动态变化的变量。如果你有var a = []
然后触发v8来增加数组大小,并且它将它重新分配到内存的不同部分,那么任何引用a
的代码都需要更新以指向新的如果JIT的东西与我想象的汇编方式类似,那就说明。 (我对汇编,C和JIT知之甚少。)
所以我想知道,v8如何在内部管理这些变量引用。它是如何运作的。
我的困惑在于它连接到实际内存地址的部分。有些东西必须存储实际的内存地址,有些东西是硬编码的。但是如果它被重新分配,那么这些引用似乎需要更新。