2013-10-07 35 views
1

如何才能写出更简洁却不使用memcpy?复制一小部分字节

memcpy(pDest, pSrc, 4); 

for (int i = 0; i < 4; i++) 
    pDest[i] = pSrc[i]; 

,因为调用的memcpy是不是最佳有时

+6

哪种语言,c或C++? – user1810087

+5

什么是“不理想”?慢?太大? – RvdK

+4

也许会得到一个编译器,其中调用memcpy总是最佳... – PlasmaHH

回答

2
#include <cstdint> 

*(uint32_t*)pDest = *(uint32_t*)pSrc; 
+0

@xmoex它将四个字节从源复制到目的地 – john

+0

,无论如何将导致一个memcpy –

+0

好吧,我明白你的意思了:-) @john – xmoex

0

对于C++:

std::copy(std::begin(pSrc), std::end(pSrc), std::begin(pDest)); 
+1

这个算法通常被优化来调用'memmove'来获得可复制的类型。 – Simple

3

这里有很好的意见,但由于没有人尚未发布的最明显的答案:

现代编译器在优化memcpy方面非常出色。它可以内联它,或者为不同的数据使用不同的版本。

首先测量您的代码性能,并根据此结果得出结论。 如果memcpy似乎是您的代码的瓶颈,您可能需要重新考虑您的算法 。

通过引入您自己的memcpy的替代方法,您可能会引入更大/更慢的代码, 或更糟:不可移植的代码,可能在最不可预料的情况下中断。