亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何進行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

珠海市| 曲阜市| 西昌市| 吉木乃县| 通河县| 洪泽县| 承德市| 榆树市| 武清区| 封丘县| 鄂尔多斯市| 手机| 砀山县| 克拉玛依市| 新田县| 和政县| 东平县| 营口市| 卫辉市| 岑溪市| 临高县| 育儿| 延边| 本溪| 交城县| 壶关县| 本溪市| 房产| 九龙城区| 大埔区| 临夏县| 阳山县| 武汉市| 德惠市| 兴文县| 淮北市| 多伦县| 色达县| 那坡县| 台中市| 濮阳县|