【发布时间】:2018-09-07 14:51:53
【问题描述】:
在 x86-64 下切换堆栈的最少代码是多少?我正在尝试在 Windows 和 Linux 下实现纤程,没有 getcontext 或 setjmp + 内联汇编。真的像交换 $rsp 和 $rbp 一样简单吗?因为我可以很容易地做到这一点。我只是不知道该怎么做。我对我的 x86-64 知识生疏了。
【问题讨论】:
-
我不确定最快的方法是什么,但您可能想看看libcoro,它有很多实现。另外,(作者)告诉我this 非常快。在 Windows 上,有一个 fibers API,这对于您的代码来说非常少……
-
你需要一些 asm,因为没有它你不能切换rsp。此外,根据您放置(例如)
coroutine_switchto()调用的位置,您需要保存/恢复一些被调用者保存的 regs 和 [可能] 标志寄存器 -
这个问题有点令人困惑。您想知道切换堆栈的最简单方式还是最快方式或smallest-code-size方式?标题说得很快,但问题的主体说代码最少。
标签: c linux windows assembly x86-64