之前學生時代,只是完成功能就行,進入公司以後,因爲產品的特殊性,須要很是考慮效率,發現有如下幾個策略(該文不定時更新):
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次方。使用這個操做,能夠提升malloc的效率,尤爲是動態變化的數據結構(ring_buff、ring_queue)時(這個主要用於malloc開闢內存時)。