CNode

为何以下代码只会占满机器的内存,但不会溢出

问答
Wwangchaoduo发布于8 年前最后回复8 年前4 回复5027 浏览0 收藏

为何以下代码只会占满机器的内存,但不会溢出,那当内存满了之后,新的new出来的Buffer放在哪里呢?

let arr = [];
while(true)
  arr.push(new Buffer(1000));
查看回复

回复 (4)

N
nodepaladin#1·8 年前

Buffer是不占v8内存的。新new的buffer应该是放在了虚拟内存里。

来自酷炫的 CNodeMD

D
daileimail#2·8 年前

堆和栈了解一下

来自酷炫的 CNodeMD

L
lovegnep#3·8 年前

个人理解: 每次分配的内存都是虚拟内存,64位系统,虚拟内存最大为2^64-1,所以申请内存理论上是可以超过物理内存大小的。 由于你的代码只申请不使用,所以操作系统是不会分配物理内存给你的。只在你使用该段内存的时候操作系统才会分配物理内存给你。

C
CoderIvan#4·8 年前

官网API

Prior to Node.js 8.0.0, the memory allocated for such Buffer instances is not initialized and can contain sensitive data.

看是不是这个原因

参与回复
登录后即可参与回复。登录