微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数拆分对运行时间的影响

如何解决函数拆分对运行时间的影响

我正在用 C(Windows 环境)编写 DSP 代码。该代码应由另一位工程师修改,以在 Cortex-M4 上运行。这位工程师声称,为了减少运行时间,我已经实现的许多功能应该合并为一个功能。我宁愿避免它,以保持清晰和测试。

他的说法有道理吗?如果是,我可以在哪里阅读它。不然我能不能不对比一下运行时间就证明他错了?

解决方法

他的说法有道理吗?

取决于上下文。现代编译器完全能够内联函数调用,但这通常意味着这些函数必须放在同一个翻译单元中(本质上是同一个 .c 文件)。

如果您的函数在同一个 .c 文件中,那么他们的声明是错误的,如果您的函数分散在多个文件中,那么他们的声明可能是正确的。

如果是,我可以在哪里阅读。

函数内联已经存在大约 30 年了。 C 甚至在 1999 年为它添加了一个 inline 关键字(C++ 还有一个更早的),尽管在 2000 年代,编译器在确定何时和什么内联方面变得比程序员更聪明。如今,在使用现代编译器时,inline 大多被认为已过时。

不然我能不能不对比运行时间就证明他错了?

通过反汇编优化后的代码,看看有没有函数调用。尽管如此,Cortex M 上的函数调用成本相对较低(除非有大量不同的参数),因此手动优化以删除它们将是非常微小的优化。

,

一如既往,您可以在代码大小和执行速度之间进行选择。

如果您希望消除调用新函数的堆栈开销但希望保持代码模块化,请考虑使用适合您的编译器的 inline 函数属性,例如

static inline  void com_ClearMessageBuffer(uint8_t* pBuffer,uint32_t length)
{
    NRF_LOG_DEBUG("com_ClearMessageBuffer");
    memset(pBuffer,length);
}

然后在编译时,您的内联函数代码将被插入到代码流中,无论它在哪里被调用。

这将加快执行速度,但多次调用会增加代码大小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。