💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Smalloc ~~~ 稳定度: 1 - 实验性 ~~~ ### smalloc.alloc(length[, receiver][, type]) - `length` {Number} `<= smalloc.kMaxLength` - `receiver` {Object} 可选,缺省为 `new Object` - `type` {Enum} 可选,缺省为 `Uint8` 返回 `receiver` 及所分配的外部数组数据。如果未传入 `receiver` 则会创建并返回一个新的 Object。 Buffer 后端为一个只处理外部原始内存的分配的简易分配器所支撑。Smalloc 暴露了该功能。 这可用于创建你自己的类似 Buffer 的类。由于不会设置其它属性,因此使用者需要自行跟踪其它所需信息(比如所分配的长度 `length`)。 ~~~ SimpleData.prototype = { /* ... */ }; ~~~ 它只检查 `receiver` 是否为一个非 Array 的 Object。因此,可以分配外部数组数据的不止纯 Object。 ~~~ // { [Function allocMe] '0': 0, '1': 0, '2': 0 } ~~~ V8 不支持向一个 Array 分配外部数组数据,如果这么做将会抛出异常。 您可以指定您想要的外部数组数据的类型。所有可取的值都已在 `smalloc.Types` 中列出。使用示例: ~~~ // { '0': 0, '1': 0.1, '2': 0.2 } ~~~ ### smalloc.copyOnto(source, sourceStart, dest, destStart, copyLength); - `source` 分配了外部数组的来源对象 - `sourceStart` 从这个位置开始拷贝 - `dest` 分配了外部数组的目标对象 - `destStart` 拷贝到这个位置 - `copyLength` 拷贝的长度 从一个外部数组向另一个拷贝内存。所有参数都是必填,否则将会抛出异常。 ~~~ // { '0': 4, '1': 6, '2': 2, '3': 3 } ~~~ `copyOnto` 会在内部自动检测分配的长度,因此无需对此给出额外的参数。 ### smalloc.dispose(obj) - `obj` 对象 释放已使用 `smalloc.alloc` 分配到一个对象的内存。 ~~~ // {} ~~~ 这对于减轻垃圾回收器的负担有所帮助,但开发者务必小心。难以跟踪的应用程序可能会发生奇怪的错误。 ~~~ // 将导致: // Error: source has no external array data ~~~ `dispose()` 不支持 Buffer,传入将会抛出异常。 ### smalloc.kMaxLength 最大的分配大小。该值同时也适用于 Buffer 的创建。 ### smalloc.Types 外部数组类型的可取值,包含: - `Int8` - `Uint8` - `Int16` - `Uint16` - `Int32` - `Uint32` - `Float` - `Double` - `Uint8Clamped`