C++——最快的整数类型?

标签 c++ performance

我一直在对算法进行基准测试,没有必要知道细节。主要组件是缓冲区(原始整数数组)和索引器(整数 - 用于访问缓冲区中的元素)。

缓冲区最快的类型似乎是 unsigned char,以及 short、int、long 的有符号和无符号版本。但是 char/signed char 速度较慢。差异:1.07 倍。

对于索引器,有符号和无符号类型之间没有区别。然而,int 和 long 比 char 和 short 快 1.21 倍。

在考虑性能而不是内存消耗时,是否应该默认使用一种类型?

注意:对缓冲区和索引器的元素使用的操作是赋值、递增、递减和比较。

最佳答案

通常最大的胜利来自缓存。

如果您的数据值足够小以适合 8 位,那么与使用整数并浪费 3 个字节/值相比,您可以在 CPU 缓存中容纳更多数据。如果您正在处理一个数据 block ,您将在缓存命中方面获得巨大的速度优势。

索引的类型不太重要,只要它适合 CPU 寄存器(即不要尝试在 8 位 CPU 上使用 long long),它会有相同的速度

编辑:还值得一提的是,测量速度很棘手。您需要多次运行该算法以允许缓存,您需要观察 CPU 上还有什么在运行,甚至还有哪些其他硬件可能正在中断。除非您非常小心,否则 10% 的速度差异可能会被视为噪音。

关于C++——最快的整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015715/

相关文章:

Java多线程渲染,如何优化

python - 这是解决子集和的更好方法吗?

mysql - 如何找出导致应用程序变慢的原因?

c++ - 你如何断言一个对象在 C++ 中有一个特定的方法?

c++ - 在 CMake 中添加自定义构建步骤

c++ - 实现一个可以存储其函数参数的仿函数模板

.net - 生产中 .NET 应用程序的持续性能监控?

c++ - 本地数据库的密码解决方案,在客户端和服务器之间传递

c++ - Direct 2D 在内存中留下指针吗?

javascript - Wordpress - 我应该将脚本分成它们的特定页面还是有一个主 js 文件?