c++ - 为什么 uint32_t 与 uint64_t 速度差异?

标签 c++ performance

尝试了解 g++/cpu 如何在运行时处理整数。

我正在测量以下函数运行需要多长时间:

template<class T>
void speedTest() {
    for(T d=0;d<4294967295u;d++)int number;
}

这个简单的方法将多次运行哑循环 uint32_t 的最大值

当我打电话时:

speedTest<uint32_t>();

该软件平均需要 8.15 秒,但当我调用时:

speedTest<uint64_t>();

该软件平均需要 10.35 秒。

为什么会发生这种情况?

最佳答案

一些可能的原因:

  • 一般来说,较大的数据类型需要更多的内存带宽
  • 即使循环计数器保存在寄存器内,CPU 也可能会花费更多时间来进行大值计算,特别是在需要多个寄存器的情况下(例如,如果您的 CPU 只有 32 位宽的寄存器)
  • 编译器需要发出额外的机器指令来模拟 CPU 不直接支持的任何类型
  • 这还取决于优化。这样一个没有副作用的循环可以完全优化,无论int number;如何。 (可能只是 for(T d=0;d<4294967295u;d++); )

您可以通过提供一些程序集来继续您的调查/练习。

关于c++ - 为什么 uint32_t 与 uint64_t 速度差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031684/

相关文章:

java - 如何在 Android 上的 Qt5.2 中创建启动画面?

performance - OpenCV 的视频流很慢

关于 'while + read' .vs. 的性能问题AWK

c++ - 等于运算符==可以用来做校验位吗?

c++ - strVar.at(index) 与 strVar[index]

c++ - 如何保护进程不被杀死?

sql - 在数据库中搜索 UPC 代码的最佳方法是什么?

javascript - 调试错误消息:“此页面上的脚本导致Internet Explorer运行缓慢”

asp.net - 为什么 DbContext.SaveChanges 在 Debug模式下慢 10 倍

c++ - Qt项目中 'main.cpp'的作用