1、memcpy指的是C和C++使用的内存拷贝函数,memcpy函数的功能时从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中
- 函数原型: void *memcpy(void *dest, const void* src, size_t n); //dest和src不一定是数组,任意的可读可写的空间均可
- 头文件:C中 #include<string.h>
- C++中 #include<cstring>
- 函数返回指向des的指针
- memcpy思想:大部分认为memcpy是一个char到char的拷贝循环,担心它的效率。实际上,memcpy是一个效率最高的内存拷贝函数,他不会那么傻来做一个一个字节的内存拷贝,在地址不对齐的情况下,他是一个字节一个字节的拷,地址对齐以后,就会使用CPU字长来拷,32bit或64bit,还会根据CPU的类型选择一些优化的指令来进行拷贝。总的来说,memcpy的实现是CPU类型、操作系统、cLib相关的。毫无疑问,它是内存拷贝里效率最高的,可以放心使用
2、memcpy函数的实现:
void *mymemcpy(void *dst, const void *src, size_t num)
{
assert((NULL != dst) && (NULL != src));
int wordnum = num / 4; //计算有多少个32位,按4字节拷贝
int slice = num % 4; //剩余的按字节拷贝
int *pintsrc = (int *)src; //强制转换类型,不同类型的不能进行拷贝
int *pintdst = (int *)dst;
while(wordnum--)
{
*pintsrc++ = *pintsrc++;
}
while(slice--)
{
((char *)pintdst++) = *((char *)pintsrc++);
}
return dst;
}
3、strcpy函数的实现:
void* my_strcpy(void *arr, void *brr)
{
int j = 0;
int k = 0;
while(brr[j] != 0)
{
arr[j] = brr[j];
j++;
}
arr[j] = '\0';
return arr;
}
4、strcpy和memcpy的区别:
- 复制的内容不同,strcpy只能复制字符串,而memcpy可以复制任意内容,例如:字符数组、整型、结构体、类等
- 复制的方法不同,strcpy不需要指定长度,它遇到被复制字符的串结束符“\0”才结束,所以容易溢出。memcpy是根据其第三个参数决定复制的长度
- 用途不同,通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy