[英]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.