开发者社区> hopegrace> 正文

memcpy memmove区别和实现

简介: memcpy memmove区别和实现 memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。 但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。
+关注继续查看

memcpy memmove区别和实现

memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。

但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。

memmove的处理措施:

(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝

(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝

(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝

1、memcpy实现

void* memcpy(void* dest, const void* src, size_t n)

{

    char*      d = (char*) dest;

    const char*  s = (const char*) src;

    while(n-–) 

       *d++ = *s++;

    return dest;

}

2、memmove实现

void* memmove(void* dest, const void* src, size_t n)

{

    char*     d  = (char*) dest;

    const char*  s = (const char*) src;

 

    if (s>d)

    {

         // start at beginning of s

         while (n--)

            *d++ = *s++;

    }

    else if (s<d)

    {

        // start at end of s

        d = d+n-1;

        s = s+n-1;

 

        while (n--)

           *d-- = *s--;

    }

    return dest;

}

原文:

http://www.cnblogs.com/kekec/archive/2011/07/22/2114107.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【C库函数】memcpy函数详解
【C库函数】memcpy函数详解
18 0
C/C++ memcpy的实现
memcpy作为常用函数,想必相当一部分程序员都在用的极其方便的时候却从未关注过它的具体实现,平日自然也没什么问题。但对于算法能力薄弱或者不喜欢刷题的同学来说,一旦遇见需要亲自手写的情况,突然碰见非常容易措手不及。
48 0
strcpy和strncpy的使用以及strcpy的模拟实现(三种方法)
strcpy和strncpy的使用以及strcpy的模拟实现(三种方法)
27 0
memcpy和memmove的区别及实现
memcpy和memmove的区别及实现
34 0
memset,calloc的区别
memset,calloc的区别
31 0
内存函数 memcpy,memmove ,memcmp
memcpy表示内存函数,用法跟strcpy差不多, 都是作为拷贝函数存在 strcpy只能用于字符串函数,而memcpy函数可以使用任意类型 在使用任意类型时,肯定用到的参数是void void* memcpy(const void *dest,const void *src, size_t sum); 这里的sum作为字节数传递
42 0
memcpy函数
memcpy函数
71 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载