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

  • 相关阅读:
    正则表达式() [] {}区别
    JAVA int自动装箱
    Intellij Idea debug 远程部署的的tomcat项目
    TensorFlow MNIST CNN 代码
    线性代数-01-向量究竟是什么
    线性代数-线性代数的本质
    TensorFlow MNIST 入门 代码
    TensorFlow 学习可视化 TensorBoard 简易教程
    TensorFlow 函数
    TensorFlow Demo2
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3366892.html
Copyright © 2011-2022 走看看