中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行js引擎v8源碼分析HeapNumber

發布時間:2021-12-09 09:26:56 來源:億速云 閱讀:342 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關如何進行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了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 安塞县| 奇台县| 故城县| 凌海市| 皮山县| 云梦县| 唐山市| 甘谷县| 瓦房店市| 温宿县| 茶陵县| 静乐县| 普洱| 玉山县| 都江堰市| 澳门| 外汇| 清丰县| 三河市| 九台市| 庄河市| 信丰县| 密山市| 隆化县| 微博| 开平市| 内江市| 都昌县| 鸡东县| 博湖县| 广安市| 章丘市| 叶城县| 临清市| 吴江市| 海南省| 葵青区| 慈溪市| 修文县| 府谷县|