美文网首页
查漏补缺(持续更新。。)

查漏补缺(持续更新。。)

作者: 白马啸红中 | 来源:发表于2021-01-11 15:07 被阅读0次
1、slowpathfastpath

在源码分析过程中,多次遇到过slowpathfastpath的分支判断情形,最初简单以为是编译器优化选项Build Settings——Code Generation——Optimization Level设置为Fastest,Smallest导致的,而且以为设置为Fastest,Smallest后就只会走fastpath
后来,仔细分析了slowpathfastpath的源码:

#define fastpath(x) (__builtin_expect(bool(x), 1))
#define slowpath(x) (__builtin_expect(bool(x), 0))

发现就是一个比较,意思是x=1x=0的几率很高,属于优化代码语句:
例如:

//lookUpImpOrForward方法
if (slowpath(behavior & LOOKUP_RESOLVER)) {
        behavior ^= LOOKUP_RESOLVER;
        return resolveMethod_locked(inst, sel, cls, behavior);
}

这个判断就是旨在behavior & LOOKUP_RESOLVER等于0的概率十分大,走return几率极高。

之所以反思这个slowpathfastpath,就是在断点分析lookUpImpOrForward方法中这段代码时,明明debug已经设置为Fastest,Smallest,在慢查找流程中搜索不存在的方法时,居然仍进入了if中的return语句,这样就反证了之前设置为Fastest,Smallest就只走fastpath的假设,所以导致以上反思。

所以后续代码分析不能跳过slowpathfastpath的代码,必须都分析到。

相关文章

  • 查漏补缺(持续更新。。)

    1、slowpath与fastpath 在源码分析过程中,多次遇到过slowpath与fastpath的分支判断情...

  • 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于【Android面试查漏补缺】系列文章第一篇,持续...

  • 查漏补缺

    如果想让HTML5标签兼容低版本浏览器的话,可以使用 html5shiv js来实现。注意:一定要把它引入到前面。...

  • 查漏补缺

    图文环绕和浮动 最初的CSS只是用来写文章,熟练使用float和clear两个属性来布局: float属性:指定一...

  • 查漏补缺

    1.js字符串转换成数字与数字转换成字符串的实现方法https://www.2cto.com/kf/201612/...

  • 查漏补缺

    浮动原理 1.使用之初:是为了让文字环绕图片,并且不会遮住文字。如果让图片与文字有间距,我们在浮动元素上添加。2....

  • 查漏补缺

    今天数学老师外出学习,我用了一上午的时间给孩子们查漏补缺。 首先,训练朗读:从段落与段落之间的大停顿...

  • 查漏补缺

    1 Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换2 写 u'中' 和 u'\u4e...

  • 查漏补缺

    generator(生成器) 什么是生成器:把一个列表推倒式l = [x for x in range(10)]改...

  • 查漏补缺

    session 判断

网友评论

      本文标题:查漏补缺(持续更新。。)

      本文链接:https://www.haomeiwen.com/subject/kvmzoktx.html