Node JS Buffer数据是如何存储在幕后的?

Axe*_*son 11 javascript security heap ram node.js

根据Node JS Buffer Documentation,"A Buffer类似于整数数组,但对应于V8堆外的原始内存分配".没有提供进一步的信息.

问题是数据如何存储在RAM中.节点JS缓冲区是否使用在堆上分配空间的特殊方法?这是否与V8的堆相同?我可以安全地假设对缓冲区中的数据进行任何更改实际上都会更改RAM中的数据,并且没有剩余的数据残留给窥探者吗?

对于这个非常广泛的问题感到抱歉,但我似乎找不到任何关于它如何实际工作的材料.我问的原因是因为我想确保我在我的应用程序中使用的变量不会在内存中停留超过他们需要的时间.

文档:https: //nodejs.org/api/buffer.html#buffer_class_buffer

干杯!

jfr*_*d00 8

用于实现缓冲区的nodejs源代码是http://github.com/joyent/node/blob/master/lib/buffer.jshttp://github.com/joyent/node/blob/master/src/node_buffer. cc.如果您真的想知道它的工作原理的详细信息,您可以研究实际的代码.

至于你的问题......

问题是数据如何存储在RAM中.节点JS缓冲区是否使用在堆上分配空间的特殊方法?

根据源代码,分配给缓冲区对象的内存中涉及堆分配和内存池.使用时每个都取决于它的使用方法.

这是否与V8的堆相同?

是的,垃圾收集适用于Buffer对象.如果在实现中遵循严格的规则集,则使用本机代码实现的对象可以参与垃圾收集.

我可以安全地假设对缓冲区中的数据进行任何更改实际上都会更改RAM中的数据,并且没有剩余的数据残留给窥探者吗?

是的,当您更改缓冲区中的数据时,它实际上会更改RAM中的数据(除了RAM之外没有其他地方存储更改,除非它只存储在磁盘上,而不是这种情况).

至于"没有留给窥探者的剩余数据残余",这很难说.在编程中,当堆元素或池元素增大或缩小时,它们的数据可能被复制到不同的RAM中,并且旧的,现在释放的或循环的RAM块可能仍然具有部分或全部的副本,这是很常见的.原始数据.除非特别清除,否则新分配的RAM可能很好地用于之前的其他内容,并且可能仍包含来自先前使用的信息.

另一方面,写入Buffer对象直接写入分配/分配给该Buffer对象的RAM(只要你不改变它的大小),所以如果你想降低数据的可能性留在RAM中,完成后可以覆盖Buffer对象中的数据.