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

目录
相关文章
|
30天前
|
编译器 C++
C++中memcpy函数的实现
C++中memcpy函数的实现
|
3月前
|
算法 编译器 C语言
memcpy内存拷贝函数
memcpy内存拷贝函数
36 0
|
4月前
|
存储 编译器 BI
内存函数​(memcpy、memmove、memset、memcmp)
内存函数​(memcpy、memmove、memset、memcmp)
|
4月前
|
存储 安全
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
48 0
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
|
9月前
|
编译器 C语言 C++
C进阶:内存函数memcpy, memmove, memcmp
C进阶:内存函数memcpy, memmove, memcmp
51 0
【memcpy和memmove函数的详解】
我们知道,strcpy函数是拷贝字符串的,但是它并不能拷贝例如整型,结构体之类的东西,strcpy有一定的局限性,memcpy函数可以说涵盖了所有类型数据的拷贝。
|
11月前
|
IDE 编译器 开发工具
对于memcpy和memmove的区别,以及模拟实现memcpy和memmove
对于memcpy和memmove的区别,以及模拟实现memcpy和memmove
|
11月前
|
存储 编译器 C语言
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
151 0
|
11月前
|
存储 安全
浅谈C库函数——memcpy、memmove、memcmp、memset函数
浅谈C库函数——memcpy、memmove、memcmp、memset函数
162 0