NodeJs 专题
专题目录
您的位置:Js应用 > NodeJs专题 > Node.js Smalloc
Node.js Smalloc
作者:--    发布时间:2019-11-20
稳定性: 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
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册