[置顶] memcpy优化 实现高效


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                    

你可能感兴趣的:(C++,linux)