嵌入式编程,函数是不是尽量避免调用层次太深?

bdview 2020-04-12 11:14:30

我写嵌入式软件,喜欢把底层的一些通用的代码抽象成通用的函数,供各个部分调用。不过有的地方经过几层抽象形成一个函数里面一层一层的函数调用,比如:


例如有四个函数A,B,C,D;
函数A调用函数B,函数B调用函数C, 函数C调用函数D。

然后同事说不要封装那么多次,是不是调用层数太多效率影响比较大?(每一层都需要将参数和然后地址压栈,还有调用后返回,封装太多层是不是就这些事情影响效率?影响多大?)
...全文
222 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
akari10032 2020-04-13
  • 打赏
  • 举报
回复
尽量还是封装吧,要不然编出来的bin文件会变大
bdview 2020-04-13
  • 打赏
  • 举报
回复
引用 3 楼 千梦一生 的回复:
嗯 谢谢。知乎有个人回答的也很好,你的意思和他一样,分享一下 如果做的嵌入式设备的性能确实非常有限,考虑一下这个还行。不过大体上不用关心这些,如果函数很简单就加inline, 需要优化的话编译器会帮你做的。大体上开发人员写出来的代码并不是给机器看,而是给以后的你自己和同事看的,所以可读性、封装、解耦比“少嵌套调用函数以提高性能”这一点重要得多。函数调用本身的性能开销非常低,如果真到了这点性能都需要优化的时候……重构了解一下? 至于楼上说的爆栈,这种情况确实存在。但爆栈一般发生在无限递归的情况下,普通的函数调用并不会一直调用下去,还有出栈呢。你可以留意一下你可用的栈空间多大,每个函数的调用栈多大,可以给出一个栈深度的大体数量级,一般(不含有或少含有递归的)程序不会超过这个数量级的。 作者:程与童 链接:https://www.zhihu.com/question/387283327/answer/1149128915 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
千梦一生 2020-04-13
  • 打赏
  • 举报
回复
主要还是看情况。像易用性、共用性、可读性来看自然需要封装函数。但不可避免又有损失。有得必有失。其实只要不是在进行大量递归。多调用有数几次吧,除了栈会抬高一些。速度损失不会特别大(数个指令*调用次数)。
总的说看实际情况。随意写、先实现,根据具体情况再优化
千梦一生 2020-04-13
  • 打赏
  • 举报
回复
是的,其实任何深层次调用都有损失。
嵌入式一般对这些要求较高,没有太大必要更应该减少深层次调用。
冷风1023 2020-04-13
  • 打赏
  • 举报
回复
每调一次都多一次入栈和出栈的过程,这个过程对效率损失多大看你的环境了。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧