Javascript 在io.js中使用smalloc

Javascript 在io.js中使用smalloc,javascript,node.js,buffer,io.js,Javascript,Node.js,Buffer,Io.js,本月发布了的第一个版本,我在阅读文档时发现io.js中引入了一个新模块 直到今天,我还从未觉得有必要用JavaScript这样做 我的问题是: 我想知道是否真的需要原始内存分配 使用smalloc 如果需要,为什么 使用smalloc的用例是什么 如果没有,为什么io.js成员要添加这个模块 它还说 可以指定所需的外部阵列数据的类型。所有可能的选项都列在smalloc.Types 用法示例: var doubleArr = smalloc.alloc(3, smalloc.Types.Doubl

本月发布了的第一个版本,我在阅读文档时发现io.js中引入了一个新模块

直到今天,我还从未觉得有必要用JavaScript这样做

我的问题是:

  • 我想知道是否真的需要原始内存分配 使用
    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.js
    devs添加的,它是在
    node 0.11
    分支中启动的,
    io.js
    刚刚导入的。原始内存分配意味着较低级别的内存操作,因此-更快的操作,更好的性能,这是
    node.js
    io.js
    的目标。因此,如果您需要在二进制世界中实现某些东西而不受当前缓冲区API的限制,那么您应该使用smalloc创建自己的方法来操作内存。正如文件所说:

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


    此外,这并不是试图让javascript成为强类型语言,这只是内存操作,不能通过其他方式确保更高的性能。

    感谢@micnic对这个问题的回答。我想提供一些补充信息,说明我为什么要实现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
    外部数据数组分配到实例上

    我将很快重申对您的问题的回答:

  • 我想知道在使用smalloc的javscript中是否真的需要原始内存分配
  • 对。想想类型化数组

  • 如果需要,为什么
  • 上面回答。另外,搜索任何使用类型化数组的内容

  • 使用smalloc的用例是什么
  • 上面回答。此外,开发人员还发现了它的许多其他用途

  • 如果没有,为什么io.js成员要添加这个模块
  • 早在io.js出现之前,我就写了这篇文章

  • 我们是否在试图使javascript成为一种强类型语言
  • 绝对不是。这两个根本没有关系


    更新:由于V8 v4.4中出现了突破性的更改,
    smalloc
    从io.js v2开始被标记为“不推荐使用”。

    这就是mallocs在c中所做的。。我们以前在javascript中需要这个吗?不那么为什么是现在?@NaeemShaikh,它只是帮助创建缓冲区的模块,如果您需要创建类似缓冲区的类,请使用它,如果不需要,请通过,您不会被迫使用它,每次使用缓冲区时,您都在使用smalloc。