javascript - 生成器函数的局部变量存储在堆栈还是堆上?

标签 javascript optimization heap-memory generator v8

在这篇文章中: https://wingolog.org/archives/2013/06/11/ecmascript-generators-from-a-performance-perspective ,它提到:

In a generator function, V8 stores local variables on the heap instead of on the stack.

但它也与下一段内容相矛盾:

The exception to this case is when you yield and there are temporaries on the stack. Recall in my article on V8's baseline compiler that the full-codegen is a stack machine. It allocates slots to named locals, but temporary values go on the stack at run-time,

我不明白的部分是生成器函数总是使用yield,我假设文章中提到的暂停指的是yield语句。

最佳答案

我认为这篇文章缺少一个示例:

  return 12 + yield 5

在这种情况下,必须在堆栈上分配 12,并且当挂起迭代器时,必须将其从堆栈中复制出来,然后在迭代器继续时再次复制到堆栈上。第二段讨论“临时变量”(本例中为 12 个),而不是“变量”。

关于javascript - 生成器函数的局部变量存储在堆栈还是堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55732633/

相关文章:

javascript - P5js 用 WEBGL 绘制慢速草图

android - 寻找Android的 "killer"内存缓存机制

java - 如何以编程方式增加 Java 堆大小

javascript - html 中的多个 javascript

javascript - 不断获取 HTTP REQUEST 的 HTTP 响应代码 "1"

arrays - 查找与 bool 查询匹配的大型 int 数组子集的算法

optimization - 通过命令行的图像压缩工具

matlab - 优化给出了意外的结果MATLAB

c++ - 使用 QT 和 MinGW32 在 Windows 上检查内存泄漏

javascript - 通过单击 div 选择多选项