New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

backing

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

backing

Provides a virtual address space for large, persistent segments of memory via ArrayBuffers, and methods for allocating and freeing within it, optionally via a simple reference counting garbage collector.

  • 0.3.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3
decreased by-40%
Maintainers
1
Weekly downloads
 
Created
Source

backing

Persistent storage for typed arrays / buffers.

Build Status

What?

Provides a virtual address space for large segments of memory via ArrayBuffers, and operations for alloc()ing and free()ing within the address space, optionally via a simple reference counting garbage collector. These large segments of data can optionally be automatically persisted to disk, (and shared with other processes!) via mmap.

For related work which builds on top of this see reign - a persistent, typed objects system.

Installation

Install via npm.

npm install backing

Usage

import Backing from "backing";

const store = new Backing({
  name: "demo",
  /**
   * The number of bytes which will be preallocated at a time.
   * Note that this imposes an upper bound on the largest possible
   * size of a block in the store.
   * On the server you should usually set this to the largest permissible value: 2Gb.
   */
  arenaSize: 16 * 1024 * 1024, // 16Mb
  arenaSource: {
    type: 'mmap', // Can also be 'array-buffer'
    /**
     * The full path to the directory containing the data files.
     */
    dirname: __dirname + '/data',
    /**
     * The number of garbage collection cycles a value should persist for until it is cleaned up.
     */
    lifetime: 2
  }
});

async function run () {
  await store.init();

  const address = store.alloc(64);

  store.setInt32(address, 123);

  console.log(store.getInt32(address)); // 123

  store.free(address); // 64

  // Garbage collector

  const address2 = store.gc.alloc(64);
  store.setFloat64(address2, 456.789);
  console.log(store.gc.sizeOf(address2));
  console.log(store.getFloat64(address2));

  store.gc.ref(address2); // Add a reference to our address

  store.gc.cycle(); // our value is preserved.

  store.gc.unref(address2); // Decrement the reference count, now 0.

  let freed = store.gc.cycle(); // our value is preserved but its cycle count is incremented.
  console.log(freed); // 0;

  freed = store.gc.cycle(); // our value is garbage collected because its cycle count reached 2.
  console.log(freed); // 64 + 16 = 80 bytes. The 16 bytes is the overhead of a garbage collectible block.
}

run();

License

Published by codemix under a permissive MIT License, see LICENSE.md.

Keywords

FAQs

Package last updated on 27 Mar 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc