皮皮网
皮皮网

【18kapp源码】【TV源码教程】【挂机支付源码】byte源码中

来源:抖音直播间自动回复源码 发表时间:2024-11-30 11:45:11

1.byteԴ?源码???
2.Hermes源码分析(二)——解析字节码
3.《Lua5.4 源码剖析——基本数据类型 之 布尔类型》
4.为什么一个Byte等于256字节?
5.什么是字节码文件?

byte源码中

byteԴ????

       a和b得值分别为-和.

       è¿™ä¸ªæ˜¯ç¼–码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。

       æ‰€ä»¥å¯¹äºŽå’Œ-,他们的编码分别是:

       

        。

       å¯¹äºŽa来说, 是负数(第一位为1),它的绝对值是 即,

       è€Œå¯¹äºŽb来说, 是正数,值为。

       â€”———————————————————————————————————

       0

       1

       ... ........

       

       ----------------

        共 个

       -1

       -2

       ... ........

       -

       ----------------

       å…± 个

       æˆ‘们都知道byte占8位。而2的8次方等于,也就是byte最多可以表示个不同的数,

       0~:个

       -0~:个

       ä½†æ˜¯è¿™é‡Œ0与-0表示一样的数了,所以就用-0的二进制补码表示到-里面去了

Hermes源码分析(二)——解析字节码

        前面一节 讲到字节码序列化为二进制是有固定的格式的,这里我们分析一下源码里面是源码怎么处理的

        这里可以看到首先写入的是魔数,他的源码值为

        对应的二进制见下图,注意是源码小端字节序

        第二项是字节码的版本,笔者的源码版本是,也即 上图中的源码18kapp源码4a

        第三项是源码的hash,这里采用的源码是SHA1算法,生成的源码哈希值是位,因此占用了个字节

        第四项是源码文件长度,这个字段是源码位的,也就是源码下图中的为0aa,转换成十进制就是源码,实际文件大小也是源码这么多

        后面的字段类似,就不一一分析了,源码TV源码教程头部所有字段的源码类型都可以在BytecodeFileHeader.h中看到,Hermes按照既定的内存布局把字段写入后再序列化,就得到了我们看到的字节码文件。

        这里写入的数据很多,以函数头的写入为例,我们调用了visitFunctionHeader方法,并通过byteCodeModule拿到函数的签名,将其写入函数表(存疑,在实际的文件中并没有看到这一部分)。注意这些数据必须按顺序写入,因为读出的时候也是按对应顺序来的。

        我们知道react-native 在加载字节码的时候需要调用hermes的prepareJavaScript方法, 那这个方法做了些什么事呢?

        这里做了两件事情:

        1. 判断是挂机支付源码否是字节码,如果是则调用createBCProviderFromBuffer,否则调用createBCProviderFromSrc,我们这里只关注createBCProviderFromBuffer

        2.通过BCProviderFromBuffer的构造方法得到文件头和函数头的信息(populateFromBuffer方法),下面是这个方法的实现。

        BytecodeFileFields的populateFromBuffer方法也是一个模版方法,注意这里调用populateFromBuffer方法的是一个 ConstBytecodeFileFields对象,他代表的是不可变的字节码字段。

        细心的读者会发现这里也有visitFunctionHeaders方法, 这里主要为了复用visitBytecodeSegmentsInOrder的逻辑,把populator当作一个visitor来按顺序读取buffer的内容,并提前加载到BytecodeFileFields里面,以减少后面执行字节码时解析的时间。

        Hermes引擎在读取了字节码之后会通过解析BytecodeFileHeader这个结构体中的源码资本ar字段来获取一些关键信息,例如bundle是否是字节码格式,是否包含了函数,字节码的版本是否匹配等。注意这里我们只是解析了头部,没有解析整个字节码,后面执行字节码时才会解析剩余的部分。

        evaluatePreparedJavaScript这个方法,主要是调用了HermesRuntime的 runBytecode方法,这里hermesPrep时上一步解析头部时获取的BCProviderFromBuffer实例。

        runBytecode这个方法比较长,主要做了几件事情:

        这里说明一下,Domain是用于垃圾回收的运行时模块的代理, Domain被创建时是上仙源码空的,并跟随着运行时模块进行传播, 在运行时模块的整个生命周期内都一直存在。在某个Domain下创建的所有函数都会保持着对这个Domain的强引用。当Domain被回收的时候,这个Domain下的所有函数都不能使用。

        未完待续。。。

《Lua5.4 源码剖析——基本数据类型 之 布尔类型》

       《Lua5.4 源码剖析——基本数据类型 之 布尔类型》

       Lua的基本数据类型中,布尔类型是最简单的一种。在Lua中,尽管通常认为布尔类型只有true和false两种值,但实际上,其在源码中的实现更为精细。Lua使用了TValue这个数据结构来存储所有类型,包括布尔类型。TValue包含了一个lu_byte类型的tt_(类型标记)和Value类型的value_(存储实际数据)。

       tt_字段占用1个字节,其中4个位用于存储基本类型(0-8代表nil到thread),2个位用于表示类型变体,1个位用于垃圾回收标志。布尔类型通过类型变体实现,它被声明为LUA_TBOOLEAN,当tt_的第5位为0时代表false,为1时代表true。

       判断布尔变量的宏定义在《lobject.h》中,而布尔类型的实际值并不存储在value_,而是直接在tt_字段中,以节省内存和判断复杂度。理解了这一点,我们就可以深入理解Lua中布尔类型的内存结构和使用方式。继续关注后续章节,将探讨其他基本数据类型在Lua5.4源码中的实现细节。

为什么一个Byte等于字节?

       ä¸å¯¹ã€‚

       ä¸€èˆ¬æ¥è¯´byte占用8个bit最大就是八个1,得出来的是0-而不是0-.而且这还只是用源码标示的范围,补码,反码各不相同。

什么是字节码文件?

       字节码文件是经过编译器预处理过的一种文件,是JAVA的执行文件存在形式,

       Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。

       它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比系统直接执行的慢。

扩展资料:

       在计算机中,数据只用0和1两种表现形式,(这里只表示一个数据点,不是数字),一个0或者1占一个“位”,而系统中规定8个位为一个字节,用来表示常用的个字母、符号、控制标记,其中用一个位来进行数据校验,其他七个位用来记录数据。

       按计算机中的规定,一个英文的字符占用一个字节,(如,."':;avcAVC都占用一个字节),而一个汉字以及汉字的标点符号、字符都占用两个字节,(如,。“”:;AVCavc他们就得占用两个字节)。

       另外,他们是没有办法比较的,只能将一个字符占用一个字节,N个字符占用N个字节。

       K是千 M是兆 G是吉咖 T是太拉 8bit(位)=1Byte(字节) Byte(字节)=1KB KB=1MB MB=1GB GB=1TB TB=PB PB=1EB EB=1ZB ZB=1YB YB=1BB。

       目前最大的计量单位是1BB (Brontobyte)= YB=^。

       百度百科-字节码

相关栏目:知识