稳定性: 1 - 试验

类: smalloc

由简单内存分配器(处理扩展原始内存的分配)支持的缓存。Smalloc 有以下函数:

smalloc.alloc(length[, receiver][, type])

  • length {Number} <= smalloc.kMaxLength
  • receiver {Object} 默认: new Object
  • type {Enum} 默认: Uint8

返回 receiver 对象,包含分配的外部数组数据。如果没有传入receiver ,将会创建并返回一个新的对象。

这可用于创建你自己的类似 buffer 的类。不会设置其他属性,因此使用者需要跟踪其他所需信息(比如分配的长度)。

function SimpleData(n) {
this.length = n;
smalloc.alloc(this.length, this);
} SimpleData.prototype = { /* ... */ };

仅检查 receiver 是否是非数组的对象。因此,可以分配扩展数据数据,不仅是普通对象。

function allocMe() { }
smalloc.alloc(3, allocMe); // { [Function allocMe] '0': 0, '1': 0, '2': 0 }

v8 不支持给数组分配扩展数组对象,如果这么做,将会抛出。

你可以指定外部数组数据的类型。所有可用类型在 smalloc.Types 列出,例如:

var doubleArr = smalloc.alloc(3, smalloc.Types.Double);

for (var i = 0; i < 3; i++)
doubleArr = i / 10; // { '0': 0, '1': 0.1, '2': 0.2 }

使用 Object.freeze, Object.sealObject.preventExtensions不能冻结,封锁,阻止对象的使用扩展数据扩展。

smalloc.copyOnto(source, sourceStart, dest, destStart, copyLength);

  • source {Object} 分配了外部数组的对象
  • sourceStart {Number} 负责的起始位置
  • dest {Object} 分配了外部数组的对象
  • destStart {Number} 拷贝到目标的起始位置
  • copyLength {Number} 需要拷贝的长度

从一个外部数组拷贝内存到另外一个,所有的参数都必填,否则会抛出异常。

var a = smalloc.alloc(4);
var b = smalloc.alloc(4); for (var i = 0; i < 4; i++) {
a[i] = i;
b[i] = i * 2;
} // { '0': 0, '1': 1, '2': 2, '3': 3 }
// { '0': 0, '1': 2, '2': 4, '3': 6 } smalloc.copyOnto(b, 2, a, 0, 2); // { '0': 4, '1': 6, '2': 2, '3': 3 }

copyOnto 会在内部自动检测分配的长度,因此不必设置任何附加参数。

smalloc.dispose(obj)

  • obj Object

释放通过 smalloc.alloc 给对象分配的内存。

var a = {};
smalloc.alloc(3, a); // { '0': 0, '1': 0, '2': 0 } smalloc.dispose(a); // {}

有利于减轻垃圾回收器的负担,但是开发时候还是要小心。程序里可能会出现难以跟踪的错误。

var a = smalloc.alloc(4);
var b = smalloc.alloc(4); // perform this somewhere along the line
smalloc.dispose(b); // now trying to copy some data out
smalloc.copyOnto(b, 2, a, 0, 2); // now results in:
// RangeError: copy_length > source_length

调用 dispose() ,对象依旧拥有外部数据,例如 smalloc.hasExternalData() 会返回 truedispose()不支持缓存,如果传入将会抛出。

smalloc.hasExternalData(obj)

  • obj {Object}

如果 obj拥有外部分配的内存,返回true

smalloc.kMaxLength

可分配的最大数量。同样适用于缓存创建。

smalloc.Types

外部数组的类型,包含:

  • Int8
  • Uint8
  • Int16
  • Uint16
  • Int32
  • Uint32
  • Float
  • Double
  • Uint8Clamped

Node.js Smalloc的更多相关文章

  1. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  2. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  3. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  4. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  5. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  8. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  9. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

随机推荐

  1. Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法

    背景: 从一个Member的增删改查,来了解Struts2的运行原理及学习ModelDriven拦截器.Preparable拦截器. 新建项目实现列表的展示及删除功能: web.xml <?xm ...

  2. www的构建技术

    www的构建技术分别是: html超文本标记语言,页面的文本显示 http超文本传输协议,信息传输转移的约定 url统一资源定位符,客户端浏览超文本的地址集合

  3. 微信小程序:模板消息推送提示{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXXXX]”}

    在开发小程序 模板消息定时推送功能时,在开发版测试程序功能运行正常,但提交到线上后提示报错{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXX ...

  4. 那些年,曾踩过的Spark坑

    1.报错18/01/25 14:56:58 ERROR executor.CoarseGrainedExecutorBackend: Driver 127.0.0.1:37159 disassocia ...

  5. 浅析java的深拷贝与浅拷贝

    (转自:http://www.cnblogs.com/chenssy/p/3308489.html) 首先来看看浅拷贝和深拷贝的定义: 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式 ...

  6. [C#]设计模式-抽象工厂-创建型模式

    介绍了简单工厂与工厂方法之后,现在我们来看一下工厂三兄弟的最后一个 -- 抽象工厂. 那什么是抽象工厂呢? 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相 ...

  7. [C#]在 DotNetCore 下的 Swagger UI 自定义操作

    1.Swagger UI 是什么? Swagger UI 是一个在线的 API 文档生成与测试工具,你可以将其集成在你的 API 项目当中. 支持 API 自动同步生成文档 高度自定义,可以自己扩展功 ...

  8. [LeetCode] Count Different Palindromic Subsequences 计数不同的回文子序列的个数

    Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...

  9. [LeetCode] K-diff Pairs in an Array 数组中差为K的数对

    Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...

  10. hosts管理工具1.0发布了。。。。

    hosts管理工具1.0发布了.... 可以快速管理hosts文件了,再也不用打开系统盘,一个目录一个目录的查找了. 快速方便的修改host文件,一键保存. 可快速注释当前行,或者取消注释当前行,只需 ...