【发布时间】:2019-07-16 08:31:04
【问题描述】:
我的问题很简单,但我找不到明确的答案,所以我来了。
如今的 C 编译器比几年前更高效。在新项目中重新定义 memcpy 或 memset 之类的函数还有什么好处吗?
更具体地说,我们假设项目中的目标 MCU 是 32 位 ARM 内核,例如 Cortex M 或 A。并且使用了 GNU ARM 工具链。
谢谢
【问题讨论】:
-
您是否查看过编译器生成的汇编器是否可以做得更好?
-
在现代平台/实现上只使用
memcpy,编译器应该负责任何优化,包括在必要时省略对memcpy的实际调用。查看生成的汇编代码。你可能会发现这个网站很有用:godbolt.org -
memcpy 和 memset 是标准 C 库的一部分。看看他们的源代码。对于大多数处理器架构,这两个函数都具有高度优化的汇编器实现。
-
例如:GNU ARM 工具链使用 newlib 标准 C 实现。它包含几个用于 ARM 32 位架构的 memcpy 汇编器实现:chromium.googlesource.com/native_client/nacl-newlib/+/refs/…
-
我对这里的“仍然”一词有疑问。滚动自己有性能优势从来都不是普遍正确的。这取决于您如何实现它以及您的实现是否比库实现者更好。总是有可用的用汇编程序编写的手动优化的目标特定库。 Newlib 不是一个。
标签: c optimization embedded