memcpy优化 实现高效

来源:互联网 发布:战地mac版 编辑:程序博客网 时间:2024/04/30 04:27


1:函数原型void * memcpy ( void * des, const void * src, size_t size );

它是实现对内存的拷贝,所以还是很高效的,我这里没有考虑字符重叠的情况,只是实现它的高效性,废话不多说直接上代码

1   2 #include <iostream>  3 #include <string.h>  4 using namespace std;  5   6 void* Memcpy(void *des,const void *src,size_t len)  7 {  8         size_t size=len/4;//计算有多少bit位,用整数一次性拷贝,效率高  9         size_t mod=len%4; //剩下的bit位 10         int Len=size;    //作个临时变量,后面会用到 11  12         //把他们都转化成整数,这样一次性就可以拷贝四个字节 13         int *Des=(int*)des; 14         int *SRC=(int*)src; 15  16         while(size--) 17                 *Des++=*SRC++; 18  19         //没有多余的字节,即已经拷贝完成 20         if(mod==0) 21                 return des; 22  23         char *t=(char*)src; 24         t+=Len*sizeof(int);//让t前面已经拷贝的下一个字节 25  26         char *key=(char*)des; 27         key+=Len*sizeof(int);//同理 28  29         //cout<<"des :"<<(char*)des<<"  src:"<<(char*)src<<endl; 30         while(mod--) //拷贝剩余的字节 31         { 32                 *key++=*t++; 33         } 34         //cout<<"memcpy  des :"<<(char*)des<<"  src:"<<(char*)src<<endl; 35         return des; 36 } 37  38 int main() 39 { 40         //const char *src="ac"; 41         //const char *src="asc"; 42         //const char *src="abcdefs"; 43         const char *src="abcdegfaaaaaadkdjkjsjjsjki"; 44         int len=strlen(src); 45         char des[1024]; 46         memset(des,'\0',sizeof(des)); 47         Memcpy(des,src,len); 48         cout<<"des :"<<des<<endl; 49         cout<<"src :"<<src<<endl; 50         return 0; 51 } 52                    

0 0