现在我正在用c ++编写一个coroutines库并进行汇编。但是协程切换在x86 / x64中打破了“返回堆栈缓冲区”(参见http://www.agner.org/optimize/microarchitecture.pdf p.36)的准确性,因为在切换期间我们将更改堆栈指针寄存器并返回(到另一个协程),所以所有的返回堆栈缓冲区中的内容是错误的。
除了调用足够深(返回堆栈缓冲区的大小在现代x64 cpu中为16)函数并返回清除返回堆栈缓冲区(然后旧内容全部弹出),我们可以显式通过任何指令清除(或备份)返回堆栈缓冲区?或者我们可以预加载一些新指令以避免cpu在返回堆栈缓冲区中的地址之后预加载指令吗?
感谢您的帮助!