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倍。