精易论坛

标题: 踩坑记录 汇编的跳转布局 [打印本页]

作者: 笨来无一悟    时间: 2024-7-20 00:44
标题: 踩坑记录 汇编的跳转布局
判断
跳到 假
跳到 真

假:
跳到 返回

真:
返回:

旧↑-分-割-符-新↓

判断
跳到 假

这儿不用跳 直接写为真的时候的代码

返回:
假:

返回:
ret

代码整体没有什么变动 仅仅只是跳转安排的更合理一点点 循环123456789次 可以提升几十到100+毫秒 以前为了代码的可读性 什么分支都来个标签 突然发现 可以不跳转可以不用标签就不用 牺牲可读性换取速度是值得的

[groupid=227]热心网友[/groupid]
作者: 笨来无一悟    时间: 2024-7-20 00:59
在汇编语言中,顺序执行指令和使用跳转指令的效率比较通常取决于几个因素,包括CPU架构、流水线、分支预测以及具体的上下文环境。以下是一些基本的考虑点:

顺序执行:

顺序执行指令通常是最快的,因为现代CPU设计有强大的流水线(pipeline),可以连续不断地处理顺序执行的指令。
顺序执行避免了分支导致的流水线中断,从而减少了流水线冲刷(pipeline flush)和重新填充(re-fill)的需要。
跳转执行:

使用跳转指令(如JMP、条件跳转指令等)会导致CPU的流水线中断,因为CPU需要在跳转后重新加载和处理新的指令。
跳转可能会引起分支预测失败,这会导致性能下降。现代CPU通常使用分支预测技术来尝试预测跳转的结果,但如果预测错误,就需要进行恢复操作。
分支预测:

如果分支预测准确,跳转的开销可以被最小化。但如果预测失败,就需要付出额外的代价来恢复流水线状态。
缓存效应:

顺序执行的指令更有可能被连续存储在内存中,这有助于提高缓存命中率。跳转可能会跳到内存中分散的位置,这可能降低缓存效率。
编译器优化:

编译器优化可以对代码进行重排,减少跳转的需要,或者使用其他技术来减少跳转对性能的影响。
上下文切换开销:

在某些情况下,跳转会涉及到不同代码段的切换,这可能带来额外的上下文切换开销。
总的来说,顺序执行通常在没有跳转的情况下提供最高的效率,因为它允许CPU充分利用流水线和分支预测的优势。然而,在需要基于条件改变执行流程的情况下,跳转是必要的,并且现代CPU的设计已经尽可能地减少了跳转带来的性能损失。

在实际编程实践中,应该根据具体的应用场景和性能测试结果来决定是使用顺序执行还是跳转执行。有时候,为了代码的可读性和可维护性,适当使用跳转也是必要的。
作者: Suky    时间: 2024-7-20 01:39


作者: Suky    时间: 2024-7-20 01:40


作者: 憨憨问号    时间: 2024-7-20 01:50

作者: 笨来无一悟    时间: 2024-7-20 01:54
Suky 发表于 2024-7-20 01:40


懵逼猫.gif (1.9 MB, 下载次数: 0)

懵逼猫.gif

作者: pshq123    时间: 2024-7-20 05:50
感谢分享!
作者: 凌哥    时间: 2024-7-20 11:07
短跳理论上是问题不大的,长距离跳可能会有影响




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4