相关疑难解决方法(0)

编码实践,使编译器/优化器能够制作更快的程序

许多年前,C编译器并不是特别聪明.作为一种解决方法,K&R发明了register关键字,提示编译器,将这个变量保存在内部寄存器中可能是一个好主意.他们还使第三级运营商帮助生成更好的代码.

随着时间的推移,编译器逐渐成熟.他们变得非常聪明,他们的流量分析使他们能够更好地决定寄存器中的值,而不是你可能做的.register关键字变得不重要了.

由于别名问题,FORTRAN对于某些操作可能比C更快.从理论上讲,仔细编码可以解决这个限制,使优化器能够生成更快的代码.

有哪些编码实践可以使编译器/优化器生成更快的代码?

  • 确定您使用的平台和编译器,将不胜感激.
  • 为什么这项技术似乎有效?
  • 鼓励使用示例代码.

这是一个相关的问题

[编辑] 这个问题不是关于分析和优化的整个过程.假设程序编写正确,编译完全优化,测试并投入生产.您的代码中可能有一些构造禁止优化器尽其所能地完成最佳工作.您可以做什么来重构将删除这些禁令,并允许优化器生成更快的代码?

[编辑] 偏移相关链接

c c++ optimization performance

116
推荐指数
13
解决办法
2万
查看次数

钳制实际(固定/浮点)值的最快方法?

是否有一种比使用if语句或三元运算符更有效的方法来钳制实数?我想为双打和32位修复点实现(16.16)做到这一点.我不是要求代码可以处理这两种情况; 它们将在不同的功能中处理.

显然,我可以这样做:

double clampedA;
double a = calculate();
clampedA = a > MY_MAX ? MY_MAX : a;
clampedA = a < MY_MIN ? MY_MIN : a;
Run Code Online (Sandbox Code Playgroud)

要么

double a = calculate();
double clampedA = a;
if(clampedA > MY_MAX)
    clampedA = MY_MAX;
else if(clampedA < MY_MIN)
    clampedA = MY_MIN;
Run Code Online (Sandbox Code Playgroud)

fixpoint版本将使用函数/宏进行比较.

这是在代码的性能关键部分完成的,所以我正在寻找一种尽可能有效的方法(我怀疑它会涉及位操作)

编辑:它必须是标准/便携式C,平台特定的功能在这里没有任何兴趣.此外,MY_MINMY_MAX我想要钳制的值相同(在上面的例子中加倍).

c numbers bit-manipulation clamp

37
推荐指数
7
解决办法
4万
查看次数

标签 统计

c ×2

bit-manipulation ×1

c++ ×1

clamp ×1

numbers ×1

optimization ×1

performance ×1