首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何开发C语言的效率?

如何开发C语言的效率?
EN

Software Engineering用户
提问于 2020-04-29 22:38:28
回答 2查看 138关注 0票数 -4

我想编写一个计算量很大的程序,我希望它尽可能快,所以我选择C作为语言。然而,有人告诉我,尽管它简单、效率高,但它很容易使事情慢下来而不是快,并使自己完全被钉在脚上。

好的,如果我不想让我的脚被踢掉,我可以考虑在我的代码中添加额外的静态检查,以及使用代码工具、静态分析器等等(没有人想要bug)。另一方面,检查代码会占用处理器时间。我怎样才能达到适当的平衡?

EN

回答 2

Software Engineering用户

发布于 2020-04-30 05:50:26

选择一种语言不会得到更快的代码。通过创建一个实现、找出使其慢的原因、改进它、让它激发更好的算法和重复,您可以获得更快的代码。在我的案例中,我设法改进了我认为是一个很好的方法,提高了10万倍。选择一种更糟糕的语言会阻止这种情况的发生。

票数 4
EN

Software Engineering用户

发布于 2020-04-29 23:03:57

特征分析与优化

用任何语言编写程序。

使用分析器标识代码中花费时间最多的部分,或者识别与之交互最频繁的对象。

考虑如何减少在那里花费的时间:

  • 将算法更改为使用较少蛮力的方法。
  • 将算法更改为以内存换取速度。(使用缓存等)
  • 改变算法,以利用许多处理器核心,甚至卸载到一个专家电路,如gpu,或fpga。
  • 更改数据结构,使其对齐cpu缓存线和大小。
  • 更改数据结构以删除未使用的空间
    • 使用较小的字段,
    • 通过包装更合适的结构,
    • 通过使用nan标记和指针标记技术。

  • 将语言转换为在您所写的内容与所执行的内容之间没有几层解释的语言。(对于c,这将是程序集)
    • 这避免了许多编译器/jit/解释器,但也避免了内部的技巧来挤压性能,而且往往会牺牲跨机器的可移植性。
    • 如果您确实使用程序集进行给定的优化,则始终有此代码的非程序集版本可用于基线和可移植性。
    • 类似的建议用于卸载到gpu/fpga,保持cpu版本的基线/可移植性(不是每台机器都有gpu/fpga)。

确保您在每次更改之前和之后运行该程序,以确保正在考虑的部分的速度正在提高。

冲洗并重复。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/409489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档