Node JS Buffer数据是如何在后台存储的?
How is Node JS Buffer data stored behind the scenes?
根据 Node JS 缓冲区文档,"A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap"。没有提供进一步的信息。
问题是数据是如何存储在RAM中的。 node JS buffer 是否使用特殊的方式在堆上分配 space ?它是否受到与 V8 堆相同的垃圾收集的影响?我是否可以安全地假设对缓冲区中数据的任何更改实际上会更改 RAM 中的数据,并且不会为窥探者留下任何残留数据?
抱歉这个问题太宽泛了,但我似乎无法找到任何 material 这实际上是如何工作的。我问的原因是因为我想确保我在我的应用程序中使用的变量不会在内存中停留的时间超过它们需要的时间。
文档:
https://nodejs.org/api/buffer.html#buffer_class_buffer
干杯!
实现缓冲区的nodejs源代码是http://github.com/joyent/node/blob/master/lib/buffer.js and 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 对象。如果使用本机代码实现的对象在其实现中遵循一组严格的规则,则它们有可能参与垃圾回收。
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 之外没有其他地方可以存储更改,除非它仅存储在磁盘上,但事实并非如此)。
至于"no residual remnants of the data left for snoopers",就不好说了。在编程中很常见的是,当堆元素或池元素增长或收缩时,它们的数据可能会被复制到不同的 RAM 中,而旧的、现在已释放或回收的 RAM 块可能仍然具有部分或全部数据的副本。原始数据。除非特别清除,否则新分配的 RAM 很可能之前已被用于其他用途,并且可能仍包含先前使用的信息。
另一方面,写入 Buffer 对象会直接写入 allocated/assigned 到该 Buffer 对象的 RAM(只要不导致其大小发生变化),因此如果您想减少您的数据留在 RAM 中的几率,您可以在完成后覆盖 Buffer 对象中的数据。
根据 Node JS 缓冲区文档,"A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap"。没有提供进一步的信息。
问题是数据是如何存储在RAM中的。 node JS buffer 是否使用特殊的方式在堆上分配 space ?它是否受到与 V8 堆相同的垃圾收集的影响?我是否可以安全地假设对缓冲区中数据的任何更改实际上会更改 RAM 中的数据,并且不会为窥探者留下任何残留数据?
抱歉这个问题太宽泛了,但我似乎无法找到任何 material 这实际上是如何工作的。我问的原因是因为我想确保我在我的应用程序中使用的变量不会在内存中停留的时间超过它们需要的时间。
文档: https://nodejs.org/api/buffer.html#buffer_class_buffer
干杯!
实现缓冲区的nodejs源代码是http://github.com/joyent/node/blob/master/lib/buffer.js and 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 对象。如果使用本机代码实现的对象在其实现中遵循一组严格的规则,则它们有可能参与垃圾回收。
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 之外没有其他地方可以存储更改,除非它仅存储在磁盘上,但事实并非如此)。
至于"no residual remnants of the data left for snoopers",就不好说了。在编程中很常见的是,当堆元素或池元素增长或收缩时,它们的数据可能会被复制到不同的 RAM 中,而旧的、现在已释放或回收的 RAM 块可能仍然具有部分或全部数据的副本。原始数据。除非特别清除,否则新分配的 RAM 很可能之前已被用于其他用途,并且可能仍包含先前使用的信息。
另一方面,写入 Buffer 对象会直接写入 allocated/assigned 到该 Buffer 对象的 RAM(只要不导致其大小发生变化),因此如果您想减少您的数据留在 RAM 中的几率,您可以在完成后覆盖 Buffer 对象中的数据。