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,在做高可用分布式数据库的时候拒绝了自旋锁