io.js的第一个版本本月发布,我正在阅读文档时发现了司马洛克 --一个在io.js中引入的新模块。
直到今天,我还没有觉得有必要在JavaScript上这么做。
我的问题是:
smalloc在javscript中分配原始内存?smalloc的用例是什么?它还说
可以指定您想要的外部数组数据的类型。所有可能的选项都在smalloc.Types**.**中列出
示例用法:
var doubleArr = smalloc.alloc(3, smalloc.Types.Double);下面是支持分配的类型列表
smalloc.Types#
Int8
Uint8
Int16
Uint16
Int32
Uint32
Float
Double
Uint8Clamped发布于 2015-01-21 12:32:28
首先,缓冲区是由smalloc模块支持的,这个模块不是由io.js开发人员添加的,它是在node 0.11分支中启动的,io.js刚刚导入它。原始内存分配意味着更低级别的内存操作,从而--更快的操作,更好的性能,这就是node.js和io.js的目标。因此,如果您需要在二进制世界中实现某些东西,而不局限于当前的缓冲区API,则应该使用smalloc来创建您自己的操作内存的方法。就像医生说的:
这可以用于创建您自己的类似缓冲区的类。没有设置其他属性,因此用户需要跟踪其他必要的信息(例如分配的长度)。
而且,这不是试图使javascript成为一种强类型语言,这只是内存操作,不能以其他方式确保更高的性能。
发布于 2015-02-20 21:02:45
谢谢米奇很好地回答了这个问题。我想提供一些关于我为什么实施smalloc的补充信息。
不要认为JS中的原始内存分配是一些奇怪的新事物。它是由类型化数组在引擎盖下使用的相同类型的机制。因此,只要您可以使用类型化数组,也可以使用smalloc。smalloc的优点是它没有为你定义任何东西。允许API的最大灵活性。它也是安全的,因为当对象不再被使用时,GC将清理您的分配。
一种用法是使用数学库。尤其是在编写本机模块时。我个人将其用于棘手的性能优化,即在对象上分配内存,然后在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外部数据数组分配到实例上。
我将很快重申你的问题的答案:
是。考虑类型化数组。
上面回答了。此外,搜索使用类型化数组的任何内容。
上面回答了。此外,开发人员还发现了许多其他用途。
在io.js出现之前很久我就写过了。:)
绝对不行。这两者甚至没有关系。
更新:由于V8 v4.4中出现的更改中断,从io.js v2开始,smalloc被标记为“废弃”。
https://stackoverflow.com/questions/28066317
复制相似问题