zoukankan      html  css  js  c++  java
  • 2的幂和按位与&——效率

    以前学生时代,只是完成功能就行,进入公司之后,由于产品的特殊性,需要非常考虑效率,发现有以下几个策略(该文不定时更新)
    hash%length==hash&(length-1)的前提是length是2的n次方
    当 B满足是2的n次方时,有 A%B == A & (B-1)
    使用后者的效率比求余操作高,在对效率要求高的场合,建议使用后者(我目前的应用场景主要是两个,hash桶和ring队列)。
    当B满足是2的n次方时, (A + B-1) &  (~(B-1))的结果会是2的n次方,且是向后扩展A的,即表达式结果大于等于A的值,但是保证了是2的n次方(若A<=B时,其结果就为B,若A>=B时,其结果为大于等于A的值,当 (A + B-1) 大于等于16时,(A + B-1) &  (~(B-1))的结果会是2的n次方)。使用这个操作,可以提高malloc的效率,尤其是动态变化的数据结构(ring_buff、ring_queue)时(这个主要用于malloc开辟内存时)。

     

     
  • 相关阅读:
    OpenJ_Bailian
    Codeforces Global Round 2: D.Frets On Fire
    Gym 102035 NWU2019组队赛2.0
    Gym 102035H :Zuhair and the Dag
    Gym 102035E:New Max
    Gym
    Linux常用命令-总结
    Linux常用命令
    Linux常用命令
    分布式会话 拦截器 单点登录
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/11613999.html
Copyright © 2011-2022 走看看