做宣传的视频网站有哪些,广东高端网站建设,鲜花网站建设策划方案书,图片设计网站免费一、引用
1.linux C编程#xff1a;重写 memcpy 函数_memcpy_fromio_老王不让用的博客-CSDN博客
2.实现一个高效率的内存拷贝函数memcpy_高效 内存复制函数_wykup的博客-CSDN博客 以上两篇博客提供了很大思路#xff0c;但是考虑到实际面试当中的时间等问题#xff0c;结…一、引用
1.linux C编程重写 memcpy 函数_memcpy_fromio_老王不让用的博客-CSDN博客
2.实现一个高效率的内存拷贝函数memcpy_高效 内存复制函数_wykup的博客-CSDN博客 以上两篇博客提供了很大思路但是考虑到实际面试当中的时间等问题结合以上两篇实现如下代码
//max_dest_len:接收buff的最大长度
//count:需要拷贝的字节长度
void *Memcpy(void *dest, size_t max_dest_len, const void *src, size_t count)
{ int nbyte sizeof(long long);int byte8count count/nbyte; /*按每次8字节拷贝*/int byte1count count%nbyte; /*剩余的按字节拷贝*/long long* ds (long long*)dest; long long* ss (long long*)src; char * dts NULL;char * sts NULL;if(max_dest_len count)return ;if((dest src) (dest srccount)) //地址向后重叠{ds (long long *)((long long)dest count-nbyte);ss (long long *)((long long )dest count-nbyte);while(byte8count--) *ds-- *ss--;ds;ss;dts (char *)ds;sts (char *)ss;while(byte1count--){*(char *)dts-- *(char *)sts--; } }else{ //地址向前重叠或者不重叠while (byte8count--)*ds *ss;dts (char *)ds;sts (char *)ss;while (byte1count--)*(char *)dts *(char *)sts; }return dest;
}
此代码可运行
核心思路兼顾时间、实现难度等
1.地址重叠主要考虑向后重叠
2.效率这里是以8字节的方式去拷贝
3.32位和64位机器数据结构所占字节的区别