生成器函数的局部变量存储在Stack或Heap中吗?

时间:2019-04-17 16:57:25

标签: javascript optimization heap generator v8

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

  

在生成器函数中,V8将局部变量存储在堆中   而不是放在堆栈上。

但它也与下一段矛盾:

  

这种情况的例外是当您屈服并且有   临时文件。回想一下关于V8基准的文章   编译器认为完整的代码生成是堆栈机。它分配插槽   到命名的本地人,但是临时值在运行时进入堆栈,

我不了解的部分是生成器函数始终使用yield,并且我认为本文中提到的 suspension 是指 yield 语句。 / p>

1 个答案:

答案 0 :(得分:2)

我认为该文章缺少示例:

  return 12 + yield 5

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