【问题标题】:C program spends 77% of the time in _platform_memmove$VARIANT$Haswell [closed]C 程序 77% 的时间在 _platform_memmove$VARIANT$Haswell [关闭]
【发布时间】:2016-12-30 07:33:20
【问题描述】:

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

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

再深入一点,看来汇编命令rep 负责占用这么多时间。从this 的帖子来看,rep 似乎没有做任何有用的事情。为什么编译器会插入它? memcpy 是从哪里来的?

我也尝试使用-g 进行编译,但随后_platform_memmove$VARIANT$Haswell 几乎不再总是被吞噬。

【问题讨论】:

  • 你能发布代码吗?你的测量有什么样的方差/标准偏差? -g 的总运行时间如何变化?
  • rep 正在 memcpy 中进行实际复制。
  • 感谢您实际告诉您到目前为止所做的事情,并找出问题所在。

标签: c macos profiling


【解决方案1】:

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

我将函数更改为接受指向结构的指针,这使我的代码速度提高了 5 倍。

【讨论】:

  • 我猜大多数人不会看到这个问题或答案,因为它已关闭,但对于看似无关的问题仍然对我有帮助。 +1 提醒我仔细传递指针/结构的重要性。用 C 编程时,很难经常想起这一点! :-)
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多