Node.js v0.11.11 マニュアル & ドキュメンテーション


Smalloc#

Stability: 1 - Experimental

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

  • length {Number} <= smalloc.kMaxLength
  • receiver {Object} オプション、デフォルトは new Object
  • type {Enum} オプション、デフォルトは Uint8

外部の配列データが割り当てられた receiver を返します。 receiver が渡されなかった場合は新しいオブジェクトが作成されて返されます。

バッファは、外部の生のメモリを割り当てるだけの単純なアロケータに 支えられています。Smallocはその機能を公開します。

これはバッファのような独自クラスの作成に用いることができます。 他のどんなプロパティも設定されないので、利用者は必要な情報 (例えば割り当てた長さの length) を追跡できるようにする必要があります。

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は外部の配列データを Array オブジェクトに割り当てることを サポートしていないため、もし渡すと例外がスローされます。

外部の配列データの型を指定することができます。 全ての可能なオプションは 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 }

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

  • source 外部の配列が割り当てられたオブジェクト
  • sourceStart コピーを開始する位置
  • dest 外部の配列が割り当てられたオブジェクト
  • destStart コピーを開始する位置
  • copyLength コピーする長さ

外部の配列に割り当てられたメモリの一つから別のメモリへコピーします。 全ての引数は必須で、どんな違反でも例外がスローされます。

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:
// Error: source has no external array data

dispose()Buffer をサポートしません。もし渡されると例外をスローします。

smalloc.hasExternalData(obj)#

  • obj Object

obj が外部に割り当てられたメモリを持つなら true を返します。

smalloc.kMaxLength#

割り当てられる最大長です。 これは Buffer を作成する際にも適用されます。

smalloc.Types#

外部の配列で可能な型の列挙です。以下を含みます:

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