c - 如何衡量我的代码质量?

标签 c performance optimization

我有一些编码经验,但让我烦恼的最大问题之一是如何改进我的代码。

我每次都会检查代码的复杂性可读性正确性,但我的问题是如何衡量代码的大小和特定命令的时间。

例如:

当我遇到下一个问题时:

A 是一个整数

B 是一个整数

C 是一个整数

if - A 大于 B 分配 C=A

else - C=B

对于这个问题,我们有 2 个简单的解决方案 -

1.使用if-else语句

2.使用三元运算符

为了在编译前对文件大小进行干式检查,我发现第二个解决方案文件比第一个解决方案文件小一半(对于 1000000 次操作,我得到一些 MB 的差异)。

我的问题是如何测量一些执行相同操作但使用不同命令的代码之间的时间差异,以及编译器对哪些命令进行优化的程度与示例中的 2 非常接近。

最佳答案

最好和最直接的方法是检查编译器在不同优化级别生成的汇编代码。

//编辑

我没有提到基准测试,因为你的问题是关于检查使用不同语言结构来完成相同工作的两个源代码之间的差异。

不要误会我的意思,基准测试是确保一般软件性能的推荐解决方案,但在这种特定情况下,它可能不可靠,因为基本操作的执行时间非常短。 即使您从多次运行中计算摊销时间,差异也可能在很大程度上取决于操作系统和环境,从而影响您的结果。

要了解有关该主题的更多信息,我推荐 this talk from Cppcon ,这实际上有点有趣。

但最重要的是

通过探索汇编代码快速了解幕后情况可以让您了解两个语句是否已优化为完全相同的代码。对代码进行基准测试可能不是很清楚。

在您询问的情况下(if vs 三元运算符)它应该始终导致相同的机器代码,因为三元运算符只是 if 和物理上实际上是相同操作的语法糖。

关于c - 如何衡量我的代码质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390674/

相关文章:

c - 尝试将 float 扫描为指向结构的指针?

javascript - 哪个性能更好: XmlHttpRequest response as HTML or JSON?

mysql - cakephp 将自定义查询转换为 cakephp 查询

c - 指针作为函数的声明?

c - scanf 中的额外/缺失字符

performance - 为什么 GNU 并行会影响脚本速度?

当字符串太长时,C# +=(加等于)(加法赋值)工作很慢?

objective-c - 算法代码优化 : Find the Equilibirum: Find an index in an array such that its prefix sum equals its suffix sum

C 编程优化和处理器扩展

c++ - 订单统计实现