根据 Node JS 缓冲区文档,“缓冲区类似于整数数组,但对应于 V8 堆外的原始内存分配”。没有提供更多信息。
问题是数据如何存储在 RAM 中。 Node JS 缓冲区是否使用一种特殊的方式在堆上分配空间?这是否与 V8 的堆一样进行垃圾收集?我是否可以安全地假设缓冲区中数据的任何更改实际上都会更改 RAM 中的数据,并且不会为窥探者留下剩余的数据?
对于这个非常广泛的问题,我感到很抱歉,但我似乎找不到任何关于这实际上是如何工作的 Material 。我问的原因是因为我想确保我在应用程序中使用的变量不会在内存中停留的时间超过他们需要的时间。
文档: https://nodejs.org/api/buffer.html#buffer_class_buffer
干杯!
最佳答案
实现缓冲区的nodejs源代码是http://github.com/joyent/node/blob/master/lib/buffer.js和 http://github.com/joyent/node/blob/master/src/node_buffer.cc .如果你真的想知道它是如何工作的细节,你可以研究实际的代码。
至于你的问题……
The question is how the data is stored in RAM. Does the node JS buffer use a special way of allocating space on the heap?
根据源代码,分配给缓冲区对象的内存涉及堆分配和内存池。何时使用取决于其使用方式的详细信息。
Is that subject to the same garbage collection as V8's heap?
是的,垃圾回收适用于 Buffer 对象。如果使用 native 代码实现的对象在实现中遵循一组严格的规则,则它们有可能参与垃圾回收。
Am I safe to assume that any change to the data in a buffer actually changes the data in RAM, and that no residual remnants of the data is left for snoopers?
是的,当您更改缓冲区中的数据时,它确实会更改 RAM 中的数据(除了 RAM 之外没有其他地方可以存储更改,除非它只存储在磁盘上,但事实并非如此)。
至于“没有留给窥探者的数据残余”,这很难说。在编程中很常见的是,当堆元素或池元素增长或缩小时,它们的数据可能会被复制到不同的 RAM 中,而旧的、现在已释放或回收的 RAM block 可能仍具有部分或全部的副本原始数据。除非特别清除,否则新分配的 RAM 很可能以前已用于其他用途,并且可能仍包含先前使用的信息。
另一方面,写入 Buffer 对象会直接写入分配/分配给该 Buffer 对象的 RAM(只要您不导致其大小发生变化),因此如果您想降低您的数据将留在 RAM 中,您可以在完成后覆盖 Buffer 对象中的数据。
关于javascript - Node JS Buffer 数据是如何在幕后存储的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621466/