[英]Are there performance problems with non-local jumps?
我正在使用非本地跳转( setjmp
, longjmp
)。 我想知道这是否会对演出造成影响。 setjmp
保存所有堆栈还是仅保存一些指针?
谢谢。
setjmp
必须保存足够的信息,以便在调用longjmp
时程序可以继续执行。 它通常由当前堆栈指针以及可能影响计算的任何其他CPU寄存器的当前值组成。
我无法评论这是否会导致“性能问题”,因为我不知道您要与之进行比较。
快速的答案是:不太可能。 如果setjmp
曾经成为您程序中的明显瓶颈,我倾向于说您的程序设计需要大修。
就像Jens所说的那样,如果它成为一个明显的瓶颈,请重新设计它,因为这不是应该使用setjmp
方式。
至于你的问题:
这可能取决于您在其上运行程序的体系结构以及编译器对代码的确切作用。 在ARM上, goto
可能会转换为一条非常快的分支指令。 另一方面, setjmp
和longjmp
需要保存和恢复所有寄存器,以便在跳转后恢复执行。 在支持NEON的ARMv7-a上,这将需要保存大约16个32位寄存器和多达16个128位寄存器,与简单分支相比,这需要很多工作。
我不知道在x86上是否需要较少的工作,但是我怀疑goto
在那里也便宜很多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.