glibc memcpy内部机制学习记录

判断需要拷贝的字节数是否大于临界值(16或8)。如果小于,直接按照one byte by one byte来拷贝。如果大于:

1、先进行内存对齐。假设要拷贝的目的地址如下所示

其中start为拷贝目的地的起始地址 ,end为拷贝目的地的结束地址,align border为内存中的对齐边界。

BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ);  //传的参数为(-dstp) % OPSIZ),就是对齐需要拷贝的字节数

2、此时的len就为对齐之后的剩余大小了,之后的处理方式直接按照虚拟内存页的大小来加快拷贝效率。

 /* Copy whole pages from SRCP to DSTP by virtual address manipulation,as much as possible.  */
    PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len);

3、如果后面还有剩余部分,还可以采用一个字一个字拷贝:

 WORD_COPY_FWD (dstp, srcp, len, len);

 /* Fall out and copy the tail.  */

4、剩余的不能采用word copy的尾部使用one byte by one byte进行拷贝。

参考:

(170条消息) glibc--memcpy源码分析_astrotycoon的博客-CSDN博客

(170条消息) glibc memcpy() 源码浅谈_杨博东的博客的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值