c++ - stl源码解析里面分析copy函数的问题
巴扎黑
巴扎黑 2017-04-17 14:32:57
0
1
889

stl源码解析里面分析copy函数的时候,说最快的是调用memmove函数
但我看了memmove的源代码,我感觉和RandomAccessIterator版本的copy函数相比,应该一样快啊。
为什么说memmove是操作在底层,速度最快。

void *memmove(void *dest, const void *src, size_t count)
{
    assert(dest != NULL && src != NULL)

    if (dest < src)
    {
        char *p = (char *)dest;
        char *q = (char *)src;
        while (count--)
        {
            *p++ = *q++;
        }
    }
    else
    {
        char *p = (char *)dest + count;
        char *q = (char *)src + count;
        while (count--)
        {
            *--p = *--q;
        }
    }

    return dest;
}

这是RandomAccessIterator版本的copy函数

template <class RandomAccessIterator, class OutputIterator, class Distance>
inline OutputIterator
__copy_d(RandomAccessIterator first, RandomAccessIterator last,
         OutputIterator result, Distance*)
{
  for (Distance n = last - first; n > 0; --n, ++result, ++first) 
    *result = *first;
  return result;
}    
巴扎黑
巴扎黑

全部回覆(1)
左手右手慢动作

。 。連續的位元組拷貝肯定比一個個迭代器存取賦值快的多

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板