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
* 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
相关文章推荐
- Linux socket 初步
- 使用C++实现JNI接口需要注意的事项
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- 关于指针的一些事情