V8 引擎中的 Smi 与 HeapObject:31 位整数为何无需分配堆空间 引言 V8 引擎是 Google 开发的一款高性能 JavaScript 引擎,广泛应用于 Chrome 浏览器、Node.js 等平台。在 V8 引擎中,对象存储在堆上,而数值类型则分为 Smi(Small Integer)和 HeapObject 两种。本文将深入探讨 Smi 和 HeapObject 的区别,特别是为什么 31 位整数不需要分配堆空间。 1. Smi 与 HeapObject 的概念 在 V8 引擎中,数值类型分为 Smi 和 HeapObject 两种: Smi:Smi 是 Small Integer 的缩写,用于表示较小的整数。Smi 的设计初衷是为了优化内存使用和提高性能。 HeapObject:HeapObject 是指存储在堆上的对象,包括所有非 Smi 的数值类型,如浮点数、无穷大、NaN 等。 2. 为什么 31 位整数不需要分配堆空间 2.1 Smi 的存储结构 Smi 的存储结构如下: +—————–+ | Value | (31位) +— …
继续阅读“V8 内部的‘小整数’(Smi)与‘堆对象’(HeapObject):为什么 31 位整数不需要分配堆空间?”