91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

晋宁县| 西丰县| 冷水江市| 江达县| 保定市| 获嘉县| 长泰县| 漳浦县| 新晃| 洛川县| 荣成市| 鸡东县| 玉屏| 赫章县| 承德县| 四川省| 柳河县| 双桥区| 平乡县| 大埔县| 互助| 绥宁县| 清苑县| 浦城县| 屯门区| 鹤峰县| 资阳市| 织金县| 合山市| 大英县| 龙山县| 即墨市| 溧阳市| 呼玛县| 永清县| 子洲县| 普定县| 桂阳县| 崇义县| 松江区| 陕西省|