如何进行js引擎v8源码分析HeapNumber
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这期内容当中小编将会给大家带来有关如何进行js引擎v8源码分析HeapNumber,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HeapNumber是保存大整形的对
千家信息网最后更新 2025年12月02日如何进行js引擎v8源码分析HeapNumber
这期内容当中小编将会给大家带来有关如何进行js引擎v8源码分析HeapNumber,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
HeapNumber是保存大整形的对象。v8里有smi保存整形,但是他只有31位,超过31位的就需要用HeapNumber。
// 存储了数字的堆对象
class HeapNumber: public HeapObject {
public:
inline double value();
inline void set_value(double value);
static inline HeapNumber* cast(Object* obj);
Object* HeapNumberToBoolean();
// Layout description.
// kSize之前的空间存储map对象的指针
static const int kValueOffset = HeapObject::kSize;
// kValueOffset - kSize之间存储数字的值,double型
static const int kSize = kValueOffset + kDoubleSize;
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(HeapNumber);
};
下面实现。
1 存取数值
// 返回double类型的值
double HeapNumber::value() {
return READ_DOUBLE_FIELD(this, kValueOffset);
}
// 写double值到对象
void HeapNumber::set_value(double value) {
WRITE_DOUBLE_FIELD(this, kValueOffset, value);
}
2 数字转boolean值。0和NAN是false,其余为true。
Object* HeapNumber::HeapNumberToBoolean() {
// NaN, +0, and -0 should return the false object
switch (fpclassify(value())) {
case FP_NAN: // fall through
case FP_ZERO: return Heap::false_value();
default: return Heap::true_value();
}
}
// 参考ieee对浮点数的定义
int fpclassify(double x) {
// Use the MS-specific _fpclass() for classification.
int flags = _fpclass(x);
// 非0正值或非0负值
if (flags & (_FPCLASS_PN | _FPCLASS_NN)) return FP_NORMAL;
// 正数0或负数0
if (flags & (_FPCLASS_PZ | _FPCLASS_NZ)) return FP_ZERO;
// 非标准化的正或负值
if (flags & (_FPCLASS_PD | _FPCLASS_ND)) return FP_SUBNORMAL;
// 正负无穷
if (flags & (_FPCLASS_PINF | _FPCLASS_NINF)) return FP_INFINITE;
// All cases should be covered by the code above.
// 不是数值
ASSERT(flags & (_FPCLASS_SNAN | _FPCLASS_QNAN));
return FP_NAN;
}
上述就是小编为大家分享的如何进行js引擎v8源码分析HeapNumber了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
分析
对象
数字
存储
引擎
源码
内容
数值
负值
专业
中小
之间
内容丰富
只有
就是
指针
文章
更多
标准
正数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器 项目 数据安全吗
数据库怎么存放文本
秦皇岛天气预报软件开发
苹果云存储服务器在贵州吗
数据库热部署
网络安全加字简单手抄报
全面解读网络安全法1
加强网络安全和信息化培训
兴化环保网络技术价目表
湖州桌面软件开发设计
手机软件开发能做什么工
悬挂式车路协同服务器怎么收费
纪检人员网络安全
宿州企业软件开发公司哪家好
安卓 查询数据库
软件开发适合文科生吗
服务器上传软件有哪些
有发展的数据库分布式
神经网络技术实例
陈希部长关于网络安全
黑暗逃生没有服务器选择
南京大学版权的索引数据库是
数据库值不能为空
数据库系统安全性技术
国内外网速都快的服务器
默纳克电梯服务器找故障
金山区优势软件开发试验设备
科学技术术语数据库
网络技术类工作
网警进服务器视频