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

Nib*_*bor 1 c macos profiling

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

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

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

我也试过编译-g,但是_platform_memmove$VARIANT$Haswell几乎所有的时间都没有吞噬.

Nib*_*bor 5

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

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

  • 我猜大多数人不会看到这个问题或答案,因为它已经关闭,但对于一个看似不相关的问题,它仍然对我有帮助。+1提醒我仔细传递指针/结构的重要性。当用 C 语言编程时,很难经常提醒这一点!:-) (2认同)