C array =比memcpy()更快的数组

Nic*_*oke -1 c optimization pointers memcpy

我有一段C代码,我正在尝试优化,其中包括设置数组a到b.我目前正在使用memcpy来实现这一点,并且它可以工作,但它不够快.即

double a[4] = {1.0, 2.0, 3.0, 4.0};
double b[4];
memcpy(b, a, sizeof(a));
Run Code Online (Sandbox Code Playgroud)

这是一个基本的例子,我的程序类似,但使用多达9000双打.我知道使用指针可以节省很多时间,但我不知道该怎么做.非常感谢您的帮助.

编辑:我不需要保留一个可以丢弃的数组.我只需要从a转移到b.

Die*_*Epp 8

如果memcpy()不起作用,你就会陷入困境.的memcpy()功能,对于大的操作数,是内存密集型的,这是不可能*打败它.唯一的选择是重新设计您的程序,因此它不需要复制数组.

("内存限制"意味着memcpy()受RAM或内存控制器速度的限制.功能可以是CPU绑定,内存绑定,IO限制等)

在大多数平台上,memcpy()使用手动调整的汇编语言编写,并进行了大量优化,以利用各种处理器功能(例如SSE).尝试使用多个内核是行不通的,因为即使您将工作分散到更多内核,也不会将工作分散到更多RAM或更多内存控制器上.

脚注

*某些平台或工具链可能没有很好的优化memcpy().