簡體   English   中英

非本地跳轉是否存在性能問題?

[英]Are there performance problems with non-local jumps?

我正在使用非本地跳轉( setjmplongjmp )。 我想知道這是否會對演出造成影響。 setjmp保存所有堆棧還是僅保存一些指針?

謝謝。

setjmp必須保存足夠的信息,以便在調用longjmp時程序可以繼續執行。 它通常由當前堆棧指針以及可能影響計算的任何其他CPU寄存器的當前值組成。

我無法評論這是否會導致“性能問題”,因為我不知道您要與之進行比較。

快速的答案是:不太可能。 如果setjmp曾經成為您程序中的明顯瓶頸,我傾向於說您的程序設計需要大修。

就像Je​​ns所說的那樣,如果它成為一個明顯的瓶頸,請重新設計它,因為這不是應該使用setjmp方式。

至於你的問題:
這可能取決於您在其上運行程序的體系結構以及編譯器對代碼的確切作用。 在ARM上, goto可能會轉換為一條非常快的分支指令。 另一方面, setjmplongjmp需要保存和恢復所有寄存器,以便在跳轉后恢復執行。 在支持NEON的ARMv7-a上,這將需要保存大約16個32位寄存器和多達16個128位寄存器,與簡單分支相比,這需要很多工作。

我不知道在x86上是否需要較少的工作,但是我懷疑goto在那里也便宜很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM