Node.js 教程
- 第1节:Node.js 教程
- 第2节:Node.js 安装配置
- 第3节:Node.js 创建第一个应用
- 第4节:Node.js NPM 使用介绍
- 第5节:Node.js REPL(交互式解释器)
- 第6节:Node.js 回调函数
- 第7节:Node.js 事件循环
- 第8节:Node.js EventEmitter
- 第9节:Node.js Buffer(缓冲区)
- 第10节:Node.js Stream(流)
- 第11节:Node.js 模块系统
- 第12节:Node.js 函数
- 第13节:Node.js 路由
- 第14节:Node.js 全局对象
- 第15节:Node.js 常用工具util
- 第16节:Node.js 文件系统
- 第17节:Node.js GET/POST请求
- 第18节:Node.js 工具模块
- 第19节:Node.js Web 模块
- 第20节:Node.js Express 框架
- 第21节:Node.js RESTful API
- 第22节:Node.js 多进程
- 第23节:Node.js JXcore 打包
- 第24节:Node.js 连接 MySQL
- 第25节:Node.js 连接 MongoDB
- 第26节:关于 Node.js
- 第27节:Node.js 示例
- 第28节:Node.js 断言测试
- 第29节:Node.js 事件
- 第30节:Node.js Punycode
- 第31节:Node.js Buffer
- 第32节:Node.js 文件系统
- 第33节:Node.js Query Strings
- 第34节:Node.js C/C++ 插件
- 第35节:Node.js 逐行读取
- 第36节:Node.js 全局对象
- 第37节:Node.js 子进程
- 第38节:Node.js REPL
- 第39节:Node.js HTTP
- 第40节:Node.js 集群
- 第41节:Node.js Smalloc
- 第42节:Node.js HTTPS
- 第43节:Node.js 控制台
- 第44节:Node.js 模块
- 第45节:Node.js 加密
- 第46节:Node.js 流
- 第47节:Node.js 网络
- 第48节:Node.js 调试器
- 第49节:Node.js 字符串解码器
- 第50节:Node.js 系统
- 第51节:Node.js DNS
- 第52节:Node.js 定时器
- 第53节:Node.js 路径
- 第54节:Node.js 域
- 第55节:Node.js TLS/SSL
- 第56节:Node.js 进程
- 第57节:Node.js TTY
- 第58节:Node.js UDP/Datagram
- 第59节:Node.js URL
- 第60节:Node.js 实用工具
- 第61节:Node.js 虚拟机
- 第62节:Node.js ZLIB
Node.js Smalloc
稳定性: 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.seal
和Object.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()
会返回true
。dispose()
不支持缓存,如果传入将会抛出。
smalloc.hasExternalData(obj)
obj
{Object}
如果obj
拥有外部分配的内存,返回true
。
smalloc.kMaxLength
可分配的最大数量。则同样适用于缓冲区的创建。
smalloc.Types
外部数组的类型,包含:
Int8
Uint8
Int16
Uint16
Int32
Uint32
Float
Double
Uint8Clamped