为什么int32_t比int64_t快?

时间:2016-05-08 05:24:08

标签: 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) {
                lim = n / i;
                k += 2;
            }
        }
    }

    std::cout << "index: " << s << std::endl;
    std::cout << "value: " << n << std::endl;
}

使用int32_t和int64_t(超过2倍)的计算时间之间存在差异。所以,简单的问题是:“为什么?”

Solution<int32_t> -> 0.35s on x32 build
Solution<int64_t> -> 0.75s on x32 build

2 个答案:

答案 0 :(得分:2)

如果x32构建意味着您的平台是32位,那么结果是预期的,因为机器字的大小是32位。您平台上的sizeof(void*)是什么?

如果它是64位那么它可能意味着你的while循环不适合你的cpu的指令缓存行。

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

答案 1 :(得分:1)

打印汇编语言,特别是分部。

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

此外,除非您的平台有分部指示,否则该部门将由软件执行。 64位除法将比32位具有更多的操作,因此需要更长的时间。

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