在io.js中使用smalloc

io.js的第一个版本是在这个月出来的,当我发现在io.js中引入了一个新的模块时,我正在阅读文档。

直到今天,我从来没有觉得有必要在JavaScript中这样做。

我的问题是:

  1. 我想知道在javscript中是否真的需要使用smalloc进行原始内存分配?

  2. 如果需要,那么为什么?

  3. 使用smalloc的用例是smalloc

  4. 如果不是那么为什么io.js会员添加这个模块?

它也说

可能的是指定您想要的外部数组数据的types。 所有可能的选项都在smalloc.Types中列出。

用法示例:

 var doubleArr = smalloc.alloc(3, smalloc.Types.Double); 

这里是分配支持的types列表

 smalloc.Types# Int8 Uint8 Int16 Uint16 Int32 Uint32 Float Double Uint8Clamped 
  1. 我们试图让JavaScript成为一种强types语言吗?

首先,缓冲区是由smalloc模块支持的,这个模块不是由io.js开发者添加的,它是在node 0.11分支中启动的, io.js刚刚导入它。 原始内存分配意味着更低的内存操作水平,因此 – 更快的操作,更好的性能,这是node.jsio.js目标。 所以如果你需要在二进制世界中实现某些东西而不被当前的Buffer API所限制,你应该使用smalloc来创build你自己的方法来操纵内存。 正如文件所说:

这可以用来创build你自己的缓冲区类。 没有其他属性设置,所以用户需要跟踪其他必要的信息(例如分配的长度)。

另外,这不是一个尝试使JavaScript成为强types语言,这只是内存操作,它不能以其他方式来确保更高的性能。

感谢@micnic回答这个问题。 我想提供一些补充资料,说明为什么我实施了一个小组。

不要以为原始内存分配是一些奇怪的新事物。 这与Typed Arrays使用的机制types相同。 所以,在任何你可以使用Typed Array的地方,你也可以使用smalloc。 smalloc的优势在于它不会为您定义任何内容。 允许您的API的最大的灵活性。 这也是安全的,因为当对象不再使用时,GC将清理你的分配。

一个用法是math库。 特别是如果编写本地模块。 我个人使用它来进行棘手的性能优化,在一个对象上分配内存,然后在JS和C ++之间共享这个内存来启用两者之间的共享状态。 这是迄今为止最快的方法,并且在Node和io.js中导致了一些令人印象深刻的优化。

请记住,您可以分配到现有的对象。 权力在哪里。 例如:

 function Alloc(n) { n >>>= 0; // uint32 conversion this.length = n; smalloc.alloc(n, this); } var a = new Alloc(16); 

有一个简单的新构造,只是将Uint8外部数据数组分配到实例上。

我会很快重申你的问题的答案:

  1. 我想知道在javscript中是否真的需要使用smalloc进行原始内存分配?

是。 认为键入数组。

  1. 如果需要,那么为什么?

回答上面。 此外,search任何使用键入数组。

  1. 使用smalloc的用例是什么?

回答上面。 另外,开发人员还有很多其他的用途。

  1. 如果不是那么为什么io.js会员添加这个模块?

早在io.js出现之前,我就写了这篇文章。 🙂

  1. 我们试图让JavaScript成为一种强types语言吗?

绝对没有。 这两者甚至没有关系。

更新:由于在V8 smalloc发生了重大变化, smalloc已经在io.js v2中被标记为“弃用”。