【问题标题】:How many actual bytes of memory node.js Buffer uses internally to store 1 logical byte of data?node.js Buffer 内部使用多少实际字节的内存来存储 1 个逻辑字节的数据?
【发布时间】:2014-12-21 22:13:05
【问题描述】:

Node.js 文档指出:

Buffer 类似于整数数组,但对应于 V8 堆外的原始内存分配。

所有整数在 javascript 内部都表示为 64 位浮点数,这对吗?

是不是说在 Node.js Buffer 中存储 1 个字节实际上要占用 8 个字节的内存?

谢谢

【问题讨论】:

  • 为什么整数会被存储为浮点数?你是在什么地方读到的,还是只是猜测?
  • @Jongware 我认为这是从 JS 中的所有浮点数推断出来的。
  • 缓冲区是字节数组,因此它们将存储与您预期一样多的字节。
  • 有趣——this has been so since the very first version(链接到 ECMAScript 5.1)。

标签: node.js memory-efficient


【解决方案1】:

缓冲区只是一个字节数组,所以缓冲区的长度本质上就是缓冲区将占用的字节数。

例如,new Buffer(size) 构造函数记录为"Allocates a new buffer of size octets." 这里octets 清楚地将单元格标识为单字节值。同样buf[index] 状态"Get and set the octet at index. The values refer to individual bytes, so the legal range is between 0x00 and 0xFF hex or 0 and 255."

虽然缓冲区绝对是一个字节数组,但您可以使用缓冲区对象上可用的buf.read* 类函数将其作为整数或其他类型进行交互。其中每一个都有受操作影响的特定字节数。

关于内部的更多细节,Node 只是将长度传递给 smalloc,它只使用 malloc,因为您希望分配指定的字节数。

【讨论】:

  • 每个对象的开销也可能很小(恒定)。
  • @Kevin Yup,这就是我试图通过essentially 传达的内容。
  • @loganfsmyth,您能否提供一个来源链接?谢谢
  • @loganfsmyth 我还是不确定。文档被允许描述我们应该如何看待它们而不是它们是如何实际实现的。我的问题是关于 Buffer 的实际实现,即一个“八位字节槽”在内存中占用了多少实际字节。您能否提供一个来源链接以验证文档是否涉及实际实施?谢谢
  • @AlexYursha 已更新。如果您将来正在寻找此类细节,请在原始问题中更清楚地说明。
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
相关资源
最近更新 更多