glibc中最新的memcpy和memset都是我寫的,我們的程式碼同時也考慮預取,對齊(編譯之後使用-D 可以清晰看到),減少指令跳轉錯誤提升效能,,希望能夠幫助你
原始碼如下:
a. memcpy:
https:// sourceware.org/git/gitw eb.cgi?p=glibc.git;a=commitdiff;h=05f3633da4f9df870d04dd77336e793746e57ed4
b. memset:
https:// sourceware.org/ml/libc- alpha/2014-06/msg00480.html
c. memcpy in Linux Kernel
[tip:core/locking] x86, mem: Optimize memcpy by avoiding memory false dependece
Linus Torvalds 的評價: 「The code looks clever and nice」!
更多早些我寫的glibc 函數程式碼 :
http:// blog.csdn.net/linguranu s/archive/2011/02/16/6189676.aspx
程式碼中主要考慮了記憶體的讀寫最佳化、指令跳轉、指令對齊,指令缺失等問題
雖然最佳化memcpy/memset等glibc函數,然而任何數據的遷移對於整體系統將是非常沈重的負擔(RC 導致延遲),坦誠的說如果發現我們的程式中由於memcpy/memset等 成為效能的瓶頸,那麽程式在間接的告訴我們架構不正確建議考慮數據參照如零拷貝,如果內容很短(如64字節之內)就直接用按需賦值就好(避免跳轉預測失敗帶來額外的成本),而不是著重進一步最佳化這些函數。
也許我們學習知識的目的是為了了解事物的規律,然後在工作中避免問題的產生,而不是等到問題出現再進一步的最佳化, 在開發高頻交易系統的時候我拒絕了memcpy,在做高可用分布式數據庫的時候拒絕了自旋鎖