You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.8 KiB

# Smalloc
Stability: 1 - Experimental
## smalloc.alloc(length[, receiver])
* `length` Number `<= smalloc.kMaxLength`
* `receiver` Object, Optional, Default: `new Object`
Returns `receiver` with allocated external array data. If no `receiver` is
passed then a new Object will be created and returned.
Buffers are backed by a simple allocator that only handles the assignation of
external raw memory. Smalloc exposes that functionality.
This can be used to create your own Buffer-like classes. No other properties are
set, so the user will need to keep track of other necessary information (e.g.
`length` of the allocation).
function SimpleData(n) {
this.length = n;
smalloc.alloc(this.length, this);
}
SimpleData.prototype = { /* ... */ };
It only checks if the `receiver` is an Object, and also not an Array. Because of
this it is possible to allocate external array data to more than a plain Object.
function allocMe() { }
smalloc.alloc(3, allocMe);
// { [Function allocMe] '0': 0, '1': 0, '2': 0 }
v8 does not support allocating external array data to an Array, and if passed
will throw.
## smalloc.copyOnto(source, sourceStart, dest, destStart, copyLength);
* `source` Object with external array allocation
* `sourceStart` Position to begin copying from
* `dest` Object with external array allocation
* `destStart` Position to begin copying onto
* `copyLength` Length of copy
Copy memory from one external array allocation to another. No arguments are
optional, and any violation will throw.
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` automatically detects the length of the allocation internally, so no
need to set any additional properties for this to work.
## smalloc.dispose(obj)
* `obj` Object
Free memory that has been allocated to an object via `smalloc.alloc`.
var a = {};
smalloc.alloc(3, a);
// { '0': 0, '1': 0, '2': 0 }
smalloc.dispose(a);
// {}
This is useful to reduce strain on the garbage collector, but developers must be
careful. Cryptic errors may arise in applications that are difficult to trace.
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()` does not support Buffers, and will throw if passed.
## smalloc.kMaxLength
Size of maximum allocation. This is also applicable to Buffer creation.