Nae*_*ikh 6 javascript buffer node.js io.js
io.js的第一个版本已于本月发布,当我发现smalloc在io.js中引入了一个新模块时,我正在阅读文档.
直到今天,我从未觉得需要在JavaScript中这样做.
我的问题是:
我想知道在javscript中是否真的需要使用原始内存分配
smalloc?
如果它需要那么为什么?
使用的用例是
smalloc什么?
如果没有那么为什么io.js会员添加这个模块?
它还说
可能是指定您想要的外部数组数据的类型.所有可能的选项都列在smalloc.Types. 
用法示例:
var doubleArr = smalloc.alloc(3, smalloc.Types.Double);
这是分配支持的类型列表
smalloc.Types#
Int8
Uint8
Int16
Uint16
Int32
Uint32
Float
Double
Uint8Clamped
- 我们是否尝试将javascript设为强类型语言?
首先,缓冲区由smalloc模块支持,并且io.jsdevs 不添加此模块,它是在node 0.11分支中启动的,io.js只是导入它.原始内存分配意味着存储器操作,因此较低水平-提高作业速度,更好的性能,这是什么目的都node.js和io.js.因此,如果您需要在二进制世界中实现某些内容而不限于当前的Buffer API,则应使用smalloc创建自己的方法来操作内存.正如文档所说:
这可以用来创建自己的类似Buffer的类.没有设置其他属性,因此用户需要跟踪其他必要信息(例如分配的长度).
此外,这不是尝试使javascript成为强类型语言,这只是内存操作,它不能以其他方式完成,以确保更高的性能.
感谢@micnic好好回答这个问题.我想提供一些关于我为什么实施smalloc的补充信息.
不要以为JS中的原始内存分配是一些奇怪的新事物.它与引擎盖下的Typed Arrays使用的机制类型相同.因此,在任何可以使用Typed Array的地方,您也可以使用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在实例上分配一个外部数据.
我会很快重申你的问题的答案:
是.想想Typed Arrays.
以上回答.此外,搜索使用Typed Arrays的任何内容.
以上回答.此外,开发人员还有许多其他用途.
我在io.js出现之前写的很久了.:)
绝对没有.这两者甚至都不相关.
更新:由于V8 smallocv4.4中的更改中断,因此已在io.js v2中标记为"已弃用".
| 归档时间: | 
 | 
| 查看次数: | 552 次 | 
| 最近记录: |