天天看點

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;

    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--;

原文:

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

繼續閱讀