您的位置:首页 > 运维架构 > Linux

memcpy优化 实现高效

2016-06-04 18:33 351 查看
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