C++ 为什么int32比int64快?

C++ 为什么int32比int64快?,c++,C++,示例代码: template<typename T> inline void Solution() { T n = 0; T k = 0; T s = 1; while (k < 500) { n += s++; k = 2; T lim = n; for (T i = 2; i < lim; i++) { if (n % i == 0) {

示例代码:

template<typename T>
inline void Solution() {
    T n = 0;
    T k = 0;
    T s = 1;
    while (k < 500) {
        n += s++;
        k = 2;
        T lim = n;
        for (T i = 2; i < lim; i++) {
            if (n % i == 0) {
                lim = n / i;
                k += 2;
            }
        }
    }

    std::cout << "index: " << s << std::endl;
    std::cout << "value: " << n << std::endl;
}
模板
内联无效解决方案(){
tn=0;
tk=0;
ts=1;
而(k<500){
n+=s++;
k=2;
T lim=n;
对于(ti=2;istd::cout如果
x32
build意味着您的平台是32位的,那么结果是预期的,因为机器字的大小是32位。您的平台上的
sizeof(void*)
是什么

如果是64位,则可能意味着while循环不适合cpu的指令缓存线


实际上,像(gprof、cachegrind、stackgrind等)这样的评测工具将提供比猜测更准确的答案。

打印出汇编语言,尤其是分区

在32位平台上,可能需要以双字样式执行64位算术。例如,通过加法,先添加较低的32位值,然后再添加较高的32位值以及第一次加法的进位。汇编语言将显示这一点

此外,除非您的平台有除法指令,否则除法将由软件执行。64位除法的运算量将大于32位除法,因此需要更长的时间


正如其他人所说,检查机器的指令和数据对齐。汇编语言应该显示这一点。

为什么不?您的预期结果是什么?您是否在64位系统上?您是否查看了两个版本生成的汇编代码?在64位模式下,唯一真正的区别是GCC对寄存器的选择。
rax
对于
int64\u t
eax
int32\u t
,生成的指令是相同的。在32位模式下,由于没有64位寄存器可用,因此为
int64\u t
生成的代码要多得多。
Solution<int32_t> -> 0.35s on x32 build
Solution<int64_t> -> 0.75s on x32 build