C程序占77%的时间在_platform_memmove $ VARIANT $ Haswell

我正在分析用C编写的一些数字代码(profiler是Instruments,编译器在Mac OSX 10.11.6上是clang )。 在_platform_memmove$VARIANT$Haswell花费了77.3%的运行时间。

在汇编输出中,上面的函数由DYLD-STUB$$memcpy调用。 但是,我的C代码中没有memcpy (虽然我确实有一些malloc )。

更进一步,似乎汇编命令rep负责占用这么多时间。 从这篇文章来看,似乎rep没有做任何有用的事情。 为什么编译器会插入它? memcpy来自哪里?

我也尝试用-g编译,但是后来_platform_memmove$VARIANT$Haswell几乎没有时间吞噬了。

经过一些搜索后,我发现了问题:我正在将一个struct传递给一个函数,每次都会复制它,因此是memcpy

我更改了函数以接受指向结构的指针,这会使我的代码加速5倍。