• (转载)memcpy的几个实现版本


    (转载)http://blog.sina.com.cn/s/blog_4d3a41f40100cvza.html

     实现void *memcpy(void *to, const void *from, size_t count)这个函数。首先对这个函数做一些说明。

    #include <string.h>

    void *memcpy(void *to, const void *from, size_t count)

    函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。

    在C99中,to和from由restrict修饰。

    先来看看微软的实现:

    void * __cdecl memcpy (
            void * dst,
            const void * src,
            size_t count
            )
    {
            void * ret = dst;

    #if defined (_M_IA64)
            {
            extern void RtlMoveMemory( void *, const void *, size_t count );

            RtlMoveMemory( dst, src, count );
            }
    #else 
           
            while (count--) {
                    *(char *)dst = *(char *)src;
                    dst = (char *)dst 1;
                    src = (char *)src 1;
            }
    #endif 

            return(ret);
    }

    再来看看coreutils中的实现:

    void *
    memcpy (void *destaddr, void const *srcaddr, size_t len)
    {
      char *dest = destaddr;
      char const *src = srcaddr;

      while (len-- > 0)
        *dest++ = *src++ ;
      return destaddr;
    }

    再来看Linux中实现:

    void *memcpy(void *dest, const void *src, size_t count)
    {
     char *tmp = dest;
     const char *s = src;

     while (count--)
      *tmp++ = *s++ ;
     return dest;
    }

  • 相关阅读:
    cookies和re
    2018福大软工实践-第一次作业之自我介绍
    2018福大软工实践-第一次作业
    Linux shell脚本编程
    课程第八次作业
    课程第七次作业
    课程第六次作业
    课程第五次作业
    四则运算课程第四次作业
    第三次课程作业
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3366892.html
Copyright © 2020-2023  润新知