seo教程技术整站优化,万盛经开区建设局官方网站,软件开发能干到多少岁,网站特效怎么做的目录 按字节拷贝实现memcpy按4字节拷贝实现memcpyTips 在 C 语言中#xff0c;我们可以自己实现 memcpy 函数来实现内存数据的拷贝操作。memcpy 函数用于将指定长度的数据从源地址复制到目标地址。 按字节拷贝实现memcpy
#include stdio.hvoid* my_memcpy_byte(void*… 目录 按字节拷贝实现memcpy按4字节拷贝实现memcpyTips 在 C 语言中我们可以自己实现 memcpy 函数来实现内存数据的拷贝操作。memcpy 函数用于将指定长度的数据从源地址复制到目标地址。 按字节拷贝实现memcpy
#include stdio.hvoid* my_memcpy_byte(void* dst, const void* src, int n)
{if (dst NULL || src NULL || n 0)return NULL;char* pdst (char*)dst;char* psrc (char*)src;//判断目标内存区域和源内存区域是否有重叠if (pdst psrc pdst psrc n) {//如果有重叠就从尾部开始遍历pdst pdst n - 1;psrc psrc n - 1;while (n--)*pdst-- *psrc--;}else{while (n--)*pdst *psrc;}return dst;
}int main(void)
{char str[] HelloWorld;char* str1 str[0];char* str2 str[1];my_memcpy_byte(str1, str2, 5);printf(%s\n, str); //输出elloWWorldreturn 0;
}按4字节拷贝实现memcpy #include stdio.hvoid* my_memcpy_byte(void* dst, const void* src, int n)
{if (dst NULL || src NULL || n 0)return NULL;int* pdst (int*)dst;int* psrc (int*)src;char* pdstTemp NULL;char* psrcTemp NULL;int byte4Count n / 4; //有多少个4字节按4字节拷贝int byteCount n % 4; //剩余字节数按字节拷贝//判断目标内存区域和源内存区域是否有重叠如果有从后往前如果没有从前往后if (pdst psrc pdst (char*)psrc n){pdstTemp (char*)pdst n - 1;psrcTemp (char*)psrc n - 1;while (byteCount--){*pdstTemp-- *psrcTemp--;}pdstTemp;psrcTemp;pdst (int*)pdstTemp;psrc (int*)psrcTemp;pdst--;psrc--;while (byte4Count--){*pdst-- *psrc--;}}else{while (byte4Count--){*pdst *psrc;}pdstTemp (char*)pdst;psrcTemp (char*)psrc;while (byteCount--){*pdstTemp *psrcTemp;}}return dst;
}int main(void)
{char str[] HelloWorld;char* str1 str[0];char* str2 str[1];my_memcpy_byte(str1, str2, 1);printf(%s\n, str);return 0;
}Tips 对比字节拷贝4字节拷贝速度是提高不少。 但是需要注意void *dst, const void *src这两个参数是需要按4字节对齐的如果本身不是4字节对齐按4字节拷贝效率也会变低。