处理器最方便的整数类型
Most convenient integer type for processor
据我所知,在修改整数值时(使用+、-、&等),非处理器字大小的整数将被提升。 这是否意味着long
类型应该是单词大小。在我的编译器上,int
是32位,long
是64位long
比int
更高效
还有一件事,复合运算符是否也促进了价值观?递增和递减运算符呢?
没关系,这不是你能控制的。选择最窄的类型,其宽度足以表示您需要的值。这是在任何情况下你能做的最好的事情。
该语言保证操作的结果是正确的,编译器将选择它能找到的最有效的结果路径。这可能涉及在某个阶段更改整数大小,也可能不涉及。
处理器可以进行自己的内部转换。同样,在不改变结果的情况下。再说一次,它不在你的掌控之中。
任何人都很难给你一个直截了当的答案。在这种情况下,你能做的最好的事情就是亲自查看。
但除非你用这些数字进行数百万次运算,否则我怀疑哪一个更快是否重要。先编写可读代码,然后进行概要分析,然后再进行优化。
我还听说if (int)
比if (bool)
更快,因为bool
会升级为int
(我知道这与直觉相反),但没有人仅仅为了性能而声明int
而不是bool
。(除非,可能,在分析之后)
原则上,普通的int
应该是"快速、正常使用的整数",而long
在不同的情况下可以表示"扩展的范围,但可能较慢"。
实际发生的事情很大程度上取决于您所使用的平台
在我使用的几个微控制器上,int
是16位,long
是32位,在long
上的操作需要多个处理器指令。在"经典"的32位x86上,long
和int
通常是相同的,所以根本没有区别。在x86_64上,根据可移植性的考虑,long
可能是32位或64位;就"执行操作的指令数"而言,它们是相同的,但如果你必须在内存中读取/存储大的整数数组,那么增加的大小可能会很重要(32位整数可能表现更好,因为更适合缓存)(可能你可以做很多考虑,优化通常是违反直觉的,尤其是x86上的)。
长话短说:不要想太多这个问题,如果你需要一个"正常"整数,它可以保证快速工作,并且它的范围适合你的应用程序,只需使用int
。如果您需要最小保证大小,请查看<stdint.h>
的typedef
s(它除了为您提供精确大小的整数外,还提供"具有此最小大小的最快整数")。
但和往常一样,通常的规则适用:如果您有性能问题,首先进行配置,然后进行优化。
这是否意味着尽管需要更多内存,但long比int更有效率?
这完全取决于你的电脑。没有一个完美整数类型是普遍最优的。如果它对性能至关重要,您需要使用一些分析工具进行检查。如果它对性能不重要,你就不应该在意。
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 涉及旧式枚举和整数类型的重载解析
- 将字符串转换为整数类型T,检查是否存在溢出
- 整数文本太大,无法用任何整数类型表示--C++
- isdigit(c) - 字符或整数类型?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- C++模板专用化 - 将其他整数类型委托给uint64_t
- 何时应使用 C++ 固定宽度整数类型,它们如何影响性能?
- 根据浮点数选择最小整数类型
- 为什么 QVariant 将字符类型视为整数类型
- 我们可以在整数类型的双指针中分配2D整数数组的地址吗?怎么可能
- 默认情况下,决定整数类型是唱歌或无符号的类型
- 是否可以根据类型是整数类型还是浮点类型重载模板函数
- 使用固定整数类型的安全性
- 如何使用条件来检查类型名 T 是否是 C++ 中浮点类型的整数类型
- C++文本整数类型
- 哪种整数类型可以安全且便携式用于始终保持指针值
- 检测整数类型变量上的空白输入
- 为什么对Chrono :: Nanseconds的表示类型是签名的整数类型
- 如何处理警告:从较小的整数类型int转换为int*