![]() |
1
12
怎么样:
假设原始代码是有效的,那么这也应该以可移植的方式工作。标准规定关系运算符(
更新 要回答Sheen下面的评论,请执行以下代码:
使用GCC在x86上生成以下反汇编程序,未进行优化:
|
![]() |
2
9
有一个标准的习惯用法是使用一条比较指令进行范围检查。就像是:
如果原始类型大于
至于这个“诀窍”是如何工作的,它是纯粹的决定,在归约模之后
就你而言,我认为以下几点应该很好:
如果
说到优化,一个好的编译器应该优化原始的范围测试,在它知道满足约束的地方使用无符号算法。我想很多人都这么做了
|
![]() |
3
3
在不进行优化的情况下使用GCC生成以下x86汇编程序
比使用
当然,这是否更好取决于体系结构。
|
![]() |
4
1
|
![]() |
5
1
这是基于 bit twiddling hacks ,(强烈推荐)
它使用g++进行编译。 速度取决于使用的处理器。毕竟分支可能更快。 |
![]() |
6
1
我认为奥利·查尔斯沃思的想法是对的。然而,我怀疑它可以进一步优化(以牺牲可读性为代价)。 阈值可以标准化为零以删除比较。
|
![]() |
7
1
可以使用以下技巧将分支减少为单个分支:
|
![]() |
8
1
此代码没有高度可移植的分支(但是,abs的实现可能有一个分支)。
这是最简单的标准兼容表达式。 如果编译器没有为abs()使用优化宏,则可以使用自己的宏/内联函数。
您也可以将比较运算符替换为如下表达式:
所有这些宏都依赖于这样一个事实,即右移到位数减去一个正值或零的值等于零,而减去一个负值的值等于零。但这就是实现的定义。 |
![]() |
9
1
比较两者的绝对值
|
|
10
-1
任何一个优秀的编译器都应该能够很好地优化它。任何手部优化可能只会导致混淆。 |
![]() |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
![]() |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
![]() |
Daniel · C#轻松存储快速访问的大型位矩阵 6 年前 |
|
halbe · 优化音频DSP程序的numpy计算 6 年前 |
![]() |
Afsara · 是否有任何方法不能优化我们的应用程序? 6 年前 |