为什么node.js Buffer.allocUnsafe()比C malloc()慢3个数量级?

为什么node.js Buffer.allocUnsafe()比C malloc()慢3个数量级?,c,node.js,performance,memory,allocation,C,Node.js,Performance,Memory,Allocation,C(使用-O6编译)分配2GB内存需要16us或4us: 在这两种情况下都添加代码,以用零填充缓冲区并观察发生了什么。我所关注的用例是使用未初始化的2d数组对图形中的边存在进行O(1)次检查——初始化需要N个顶点的O(N^2)运行时。那么,为什么Buffer.allocUnsafe()和malloc()运行时存在差异呢?我们应该做同样的事情…我们只是在会计系统中保留空间。另一个实际分配和映射内存页。从上面的nodejs.org链接:“以这种方式创建的缓冲区实例的底层内存没有初始化。”这不应该完全

C(使用-O6编译)分配2GB内存需要16us或4us:


在这两种情况下都添加代码,以用零填充缓冲区并观察发生了什么。我所关注的用例是使用未初始化的2d数组对图形中的边存在进行O(1)次检查——初始化需要N个顶点的O(N^2)运行时。那么,为什么Buffer.allocUnsafe()和malloc()运行时存在差异呢?我们应该做同样的事情…我们只是在会计系统中保留空间。另一个实际分配和映射内存页。从上面的nodejs.org链接:“以这种方式创建的缓冲区实例的底层内存没有初始化。”这不应该完全像malloc()那样,只保留空间吗?它们意味着它不保证被初始化,也不保证不被初始化。例如,您可能会得到一个缓冲区,该缓冲区以前用于其他目的,但仍然包含以前的数据。在这两种情况下都添加代码以用零填充缓冲区,并观察发生了什么。我所关注的用例是使用未初始化的2d数组对图形中的边存在进行O(1)时间检查——初始化需要O(N^2)N个顶点的运行时间。那么,为什么Buffer.allocUnsafe()和malloc()运行时存在差异呢?我们应该做同样的事情…我们只是在会计系统中保留空间。另一个实际分配和映射内存页。从上面的nodejs.org链接:“以这种方式创建的缓冲区实例的底层内存没有初始化。”这不应该完全像malloc()那样,只保留空间吗?它们意味着它不保证被初始化,也不保证不被初始化。例如,您可能会得到一个缓冲区,该缓冲区以前用于其他目的,但仍然包含以前的数据。