Hermes源码分析(二)——解析字节码
前面一节 讲到字节码序列化为二进制是有固定的格式的,这里我们分析一下源码里面是源码怎么处理的这里可以看到首先写入的是魔数,他的客户值为
对应的二进制见下图,注意是端下小端字节序
第二项是字节码的版本,笔者的金沙金沙版本是,也即 上图中的源码阿里文档源码4a
第三项是源码的hash,这里采用的客户是SHA1算法,生成的端下哈希值是位,因此占用了个字节
第四项是金沙金沙文件长度,这个字段是源码位的,也就是客户下图中的为0aa,转换成十进制就是端下,实际文件大小也是金沙金沙这么多
后面的字段类似,就不一一分析了,源码头部所有字段的客户类型都可以在BytecodeFileHeader.h中看到,Hermes按照既定的内存布局把字段写入后再序列化,就得到了我们看到的字节码文件。
这里写入的数据很多,以函数头的写入为例,我们调用了visitFunctionHeader方法,并通过byteCodeModule拿到函数的php 商城拼团源码签名,将其写入函数表(存疑,在实际的文件中并没有看到这一部分)。注意这些数据必须按顺序写入,因为读出的时候也是按对应顺序来的。
我们知道react-native 在加载字节码的时候需要调用hermes的prepareJavaScript方法, 那这个方法做了些什么事呢?
这里做了两件事情:
1. 判断是否是字节码,如果是则调用createBCProviderFromBuffer,否则调用createBCProviderFromSrc,我们这里只关注createBCProviderFromBuffer
2.通过BCProviderFromBuffer的构造方法得到文件头和函数头的信息(populateFromBuffer方法),下面是这个方法的实现。
BytecodeFileFields的populateFromBuffer方法也是一个模版方法,注意这里调用populateFromBuffer方法的是一个 ConstBytecodeFileFields对象,他代表的是不可变的字节码字段。
细心的读者会发现这里也有visitFunctionHeaders方法, 这里主要为了复用visitBytecodeSegmentsInOrder的逻辑,把populator当作一个visitor来按顺序读取buffer的内容,并提前加载到BytecodeFileFields里面,以减少后面执行字节码时解析的时间。
Hermes引擎在读取了字节码之后会通过解析BytecodeFileHeader这个结构体中的字段来获取一些关键信息,例如bundle是商品分类页面设计源码否是字节码格式,是否包含了函数,字节码的版本是否匹配等。注意这里我们只是解析了头部,没有解析整个字节码,后面执行字节码时才会解析剩余的部分。
evaluatePreparedJavaScript这个方法,主要是调用了HermesRuntime的 runBytecode方法,这里hermesPrep时上一步解析头部时获取的BCProviderFromBuffer实例。
runBytecode这个方法比较长,主要做了几件事情:
这里说明一下,Domain是用于垃圾回收的运行时模块的代理, Domain被创建时是空的,并跟随着运行时模块进行传播, 在运行时模块的整个生命周期内都一直存在。在某个Domain下创建的所有函数都会保持着对这个Domain的强引用。当Domain被回收的时候,这个Domain下的所有函数都不能使用。
未完待续。。。微信呼叫中心 源码
bc是什么文件.bc格式文件怎么打开
bc是什么文件以及如何打开bc格式文件:
一、
BC文件是一种二进制文件,通常用于存储程序编译后的代码。关于如何打开这种文件,取决于具体的软件和上下文环境。一般情况下,需要使用特定的编程软件或编译器来打开和查看BC文件的内容。
二、
1. BC文件介绍:BC文件通常与编程和软件开发相关。当开发者编写源代码并通过编译器进行编译时,生成的执行文件往往就是BC文件。这类文件包含由编译器转换后的机器语言代码,这是计算机可以直接执行的语言。
2. 打开BC文件的方式:由于BC文件是二进制文件,普通文本编辑器无法正确显示其内容。因此,通常需要相应的编程软件或编译器来打开。例如,如果BC文件是由特定的编程语言编译生成,那么可以使用该编程语言的python 聊天室 源码编译器来打开和查看文件内容。此外,一些集成开发环境也支持打开和编辑BC文件。
3. 注意事项:处理BC文件时,应当谨慎。由于它们是编译后的代码文件,如果不正确地修改,可能会导致程序无法正常运行。除非你是专业的开发者,并且了解相关编程知识,否则不建议随意编辑或修改BC文件。
为了更好地理解和使用BC文件,建议深入学习相关编程语言和软件开发知识。这样不仅可以更好地理解和处理BC文件,还可以更好地进行软件开发和编程工作。
macd公式源码
不同指标的应用和含义都有所不同,MACD称为异同移动平均线,是从双指数移动平均线发展而来的,MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势。那么macd公式源码呢?MACD在应用上应先行计算出快速(一般选日)移动平均值与慢速(一般选日)移动平均值。以这两个数值作为测量两者(快速与慢速线)间的“差离值”依据。所谓“差离值”(DIF),即日EMA数值减去日EMA数值。macd怎么看买入卖出呢?
macd指标买入卖出
MACD叫指数平滑移动平均线,macd公式源码中:DIFIF1:=EMA(CLOSE,)-EMA(CLOSE,);
DEAEA1:=EMA(DIFIF1,9);
MACD1:=2*(DIFIF1-DEAEA1),STICK;
MACD2:=EMA(MACD1,3);
STICKLINE(MACD1>MACD2ANDMACD1>0,0,MACD1,1,0),COLORRED;
STICKLINE(MACD1>MACD2ANDMACD1<0,0,MACD1,1,0),COLORGREEN;
STICKLINE(MACD1<MACD2,0,MACD1,1,0),COLORCBCBC0;
STICKLINE(MACD1>=0ORMACD1<=0,0,0,,1),COLORWHITE;
DIFIF1,COLORFF;
DEAEA1,COLORYELLOW;
MACD:MACD1,NODRAW,COLORMAGENTA;
强:IF(DIFIF1>=DEAEA1,DIFIF1,DRAWNULL),COLORRED,LINETHICK2;
弱:IF(DEAEA1>=DIFIF1,DEAEA1,DRAWNULL),COLORFF,LINETHICK2;
DRAWICON(CROSS(DIFIF1,DEAEA1),DEAEA1-0.,1)。
macd指标买入卖出的话,当MACD柱状线由正变负时,为卖出信号,当DIF线下穿DEA线时,形成死叉,为卖出信号;当MACD柱状线由负变正时,为买入信号,当DIF线上穿DEA线时,形成金叉;为买进信号,MACD是股市中比较重要的技术指标,常利用MACD指标作为股票买进、卖出时点的技术判断。
PostgreSQL基于源码安装和入门教程
PostgreSQL 源码安装入门教程
本文将引导您在openEuler . LTS-SP3系统上基于源码安装并配置PostgreSQL ,包括操作系统环境设置、网络配置、软件包安装、用户和数据盘创建,以及数据库的初始化、启动和管理。1.1 操作系统环境
安装openEuler后,确保系统安装了bc命令(若缺失,后续会安装)。1.2 网络配置
通过Nmcli配置网络,首先检查并设置网络接口ens的IP地址,无论是自动获取还是静态配置。1.3 更新系统与工具安装
更新软件包并安装bc、vim、tmux和tar等工具,以支持后续操作。1.4 用户与数据盘创建
创建postgres用户和用户组,以及可能的专用数据盘,如NVMe SSD,用于提高性能。2. 安装与配置
2.1 下载与解压
以root权限下载并解压PostgreSQL 的源代码压缩包。2.2 安装与初始化
按照指导进行编译和安装,初始化数据库并设置启动参数。2.3 启动与管理
启动数据库,登录并创建必要用户、数据库和表空间。3. 开机自动启动
3.1 init.d环境
使用start-scripts中的脚本配置init.d,确保PostgreSQL在系统启动时自动运行。3.2 systemd环境
为PostgreSQL创建systemd服务文件,确保启动和管理的自动化。4. psql操作示例
展示如何使用psql进行数据库操作,包括创建数据库、模式、表和数据插入等。5. 远程连接
讲解如何配置防火墙以允许远程连接。 通过以上步骤,您将掌握PostgreSQL 的源码安装和基本管理,准备好进行数据管理和应用程序开发。2024-12-24 09:02
2024-12-24 08:41
2024-12-24 08:37
2024-12-24 08:36
2024-12-24 07:53