zoukankan      html  css  js  c++  java
  • (转载)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;
    }

  • 相关阅读:
    An analysis of a simple Java basic interview question: short s1=1; s1 = s1 +1 will report an error?
    <bits/stdc++.h> in C++
    linux 下配置可视化git 冲突合并工具kdiff3
    加分
    对老师的意见和课程总结
    12月19日
    12月18日
    12月17日
    12月16日
    12月15日
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3366892.html
Copyright © 2011-2022 走看看