我需要一个建议,关于如何在C++或汇编语言中高效地复制一块内存,如果可能的话,在单次尝试中完成。
我有一个指向内存位置和偏移量的指针。可以将内存想象为由行和列组成的二维数组,我需要复制这个数组。
那 std::memcpy
呢?
如果源和目标重叠,请使用memmove()。通常情况下,memcpy()和memmove()已经针对您的编译器的clib进行了高度优化。如果您确实要编写替代代码,请至少将其与clib版本进行基准测试,以确保不会减慢代码速度。
我有一个由5000行或更多行组成的块,在一个被调用10000次的函数中。
此外,考虑更改数据结构。也许您可以拥有一个指向二级数组(列)的指针的一维数组,而不是一个二维数组。然后,您只需要复制或移动指针,而不是整个行。您可以在Free-List中汇集列数组,这样您就不必花费大量时间来分配和释放它们。
汇编中的REP MOVSD?如果没有更多关于您要复制的内容的信息,很难说...或者,您可以重新编程DMA控制器来完成它,但实际上它会比仅使用处理器更慢。 :-)