产量与静态局部变量的比较

时间:2013-07-30 10:38:04

标签: c# c++ c

在阅读C#中的yield关键字时,让我感到震惊的是,似乎与使用函数内部声明的静态变量有一些相似之处,例如可以在C中完成。

这两种方法都是在调用之间保存函数状态的方法,而不会在函数外部暴露这个事实。

第一个问题:两者在如何保存功能状态方面有何不同?

第二个问题:保存函数状态的设计含义是什么?我看到一些基于产量的“黑客”,似乎是一场等待发生的灾难。除了可枚举集合之外是否还有其他任何情况可以从这个设计中获益?

1 个答案:

答案 0 :(得分:3)

C#yield看起来非常像Python中的yield。如果 所以,它更接近于协同进程而不是静态变量: 保存函数的整个状态。 (回到过去, 我们在英特尔实施协同流程的方式是交换 具有内存位置的堆栈指针:xchg sp, otherCoprocessStack。)

至于优点,它比重量轻得多 定义一个单独的线程,并通过一些线程与之通信 排队机制。它特别有用 迭代复杂的内存结构,如树,因为它 避免必须手动维护堆栈。