Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能解释一下Google V8字节码CreateObjectLiteral吗?_Javascript_Node.js_V8 - Fatal编程技术网

Javascript 有人能解释一下Google V8字节码CreateObjectLiteral吗?

Javascript 有人能解释一下Google V8字节码CreateObjectLiteral吗?,javascript,node.js,v8,Javascript,Node.js,V8,这是一个JavaScript源代码 const obj = { name: 'hello', age: 12 }; console.log(obj); 这是一个使用NodeJS选项生成的Google V8字节码——打印字节码 [generated bytecode for function: ] Parameter count 6 Frame size 12 0 E> 17543D4A @ 0 : a0 StackCheck

这是一个JavaScript源代码

const obj = {
    name: 'hello',
    age: 12
};

console.log(obj);
这是一个使用NodeJS选项生成的Google V8字节码——打印字节码

[generated bytecode for function: ]
Parameter count 6
Frame size 12
    0 E> 17543D4A @    0 : a0                StackCheck 
   12 S> 17543D4B @    1 : 79 00 00 29 fa    CreateObjectLiteral [0], [0], #41, r1
         17543D50 @    6 : 27 fa fb          Mov r1, r0
   54 S> 17543D53 @    9 : 13 01 01          LdaGlobal [1], [1]
         17543D56 @   12 : 26 f9             Star r2
   62 E> 17543D58 @   14 : 28 f9 02 03       LdaNamedProperty r2, [2], [3]
         17543D5C @   18 : 26 fa             Star r1
   62 E> 17543D5E @   20 : 57 fa f9 fb 05    CallProperty1 r1, r2, r0, [5]
         17543D63 @   25 : 0d                LdaUndefined 
   70 S> 17543D64 @   26 : a4                Return 
Constant pool (size = 3)
17543CFD: [FixedArray] in OldSpace
 - map: 0x3a0841e5 <Map>
 - length: 3
           0: 0x17543cdd <BoilerplateDescription[4]>
           1: 0x3a6927a1 <String[7]: console>
           2: 0x3a685b69 <String[3]: log>
Handler Table (size = 0)

[为函数生成的字节码:]
参数计数6
框架尺寸12
0 E>17543D4A@0:a0堆叠检查
12 S>17543D4B@1:79 00 00 29 fa CreateObjectLiteral[0],[0],#41,r1
17543D50@6:27 fa fb Mov r1,r0
54 S>17543D53@9:13 01 LdaGlobal[1],[1]
17543D56@12:26 f9星r2
62 E>17543D58@14:28 f9 02 03 LdaNamedProperty r2[2],[3]
17543D5C@18:26 fa星r1
62 E>17543D5E@20:57 fa f9 fb 05 CallProperty1 r1、r2、r0[5]
17543D63@25:0d
70秒>17543D64@26:a4返回
固定池(大小=3)
17543CFD:[固定阵列]在旧空间中
-地图:0x3a0841e5
-长度:3
0:0x17543cdd
1:0x3a6927a1
2:0x3a685b69
处理程序表(大小=0)

任何帮助都是感激的

顾名思义,
CreateObjectLiteral
从文本创建对象,在本例中,
{name:'hello',…}
。为了提高效率,V8使用了它所谓的“样板”对象,这些对象是部分填充的“蓝图”,可以快速复制以创建新实例;之后,将填充任何动态属性(即,非编译时常量)。在这个例子中,你没有这些,所以你看不到。观察与以下稍加修改的示例的差异:

function foo(n, a) {
    const obj = {name: n, age: a};
    console.log(obj);
}

foo("hello", 12);

那么你对字节码的问题到底是什么?您对v8字节码的熟悉程度如何?你需要这个做什么,只是好奇?。。。您具体需要/想要解释什么?我想知道CreateObjectLiteral的操作数含义。非常感谢您的回答。在“CreateObjectLiteral[0]、[0]、#41、r1”中,[0]、#41、r1是什么?字节码的操作数。请参见
BytecodeGraphBuilder::VisitCreateObjectLiteral
。[0]是样板文件的常量池项,[0]是类型反馈向量中的插槽,#41是带标志的位字段,r1是目标寄存器。