Node.js v0.11.11 マニュアル & ドキュメンテーション
Table of Contents
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