苹果工程师的牛逼之处

关于iPhone的CPU处理器有32位和64位,从iPhone5s开始苹果就开始使用64位的处理器了,关于32位和64位有什么区别呢?
首先我们要知道32位和64位代表什么,它指的是CPU的数据吞吐量,比如32位的CPU是有32根数据线,64位的则有64根数据线,而一根数据线可以读取一位信号(0或1),32位的CPU一次能处理4个字节的数据,64位的则可以处理8个字节的数据,从数据处理上速度上明显64位的要更快。
在我学习Runtime原理时,看到源代码有一处非常有意思的算法。
假如有这样一个需求,当我传入一个整数时,返回的结果必须是8的倍数,比如我传入12,返回的是16;传入的18,则返回的是24.。。。。

普通程序员小华的想法是:

设传入的参数为x,则(x+7)/8 * 8即为8的整数倍。转换为代码即为

int wordAlign(int x){
    return (x+7) / 8 * 8;
}
基础较好的程序员小明的想法是:

设传入的参数为x,则通过右移3位再左移3位即可得到8的整数倍,而且这样写速率也会更快

int wordAlign(int x){
    return (x+7) >> 3 << 3;
}

在此解释一下小明的操作:
假如我们传入wordAlign的参数为12,则12+7=19,用二进制表示就是0001 0011,右移3位的话变成0000 0010,然后再左移3位,则为0001 0000,即十进制的16

苹果工程师的写法:
苹果工程师的牛逼之处_第1张图片
Snip20190313_1.png

之所以说苹果工程师牛逼,是因为他的封装思想,他使用一个方法就可以同时满足32位和64位的CPU,假如是64位机器,则 (x+7) & ~7,这里我们传入的还是12,计算过程和结果如下图:

苹果工程师的牛逼之处_第2张图片
Snip20190313_2.png

结果仍是16,程序员小明的写法虽然和苹果工程师的写法在CPU运行速度是一样的,但显然苹果工程师的写法更加灵活,这一点是值得我们学习的地方,这也是我觉得苹果工程师的牛逼之处。。

你可能感兴趣的:(苹果工程师的牛逼之处)