尺寸t在C+中的性能+; < >我把代码翻译成C++,如下:< /P> #include <iostream> using namespace std; int t = 20; bool is_evenly_divisible(const int a, const int b) { for (int i=2; i<=b; ++i) { // Line 1 if (a%i != 0) return false; } return true; } void run() { int i = 10; while (!is_evenly_divisible(i, t)) { i += 2; } cout << i << endl; } int main(int argc, char** argv) { run(); return 0; } #包括 使用名称空间std; int t=20; 布尔是均匀可除的(常数a,常数b){ 对于(int i=2;i

尺寸t在C+中的性能+; < >我把代码翻译成C++,如下:< /P> #include <iostream> using namespace std; int t = 20; bool is_evenly_divisible(const int a, const int b) { for (int i=2; i<=b; ++i) { // Line 1 if (a%i != 0) return false; } return true; } void run() { int i = 10; while (!is_evenly_divisible(i, t)) { i += 2; } cout << i << endl; } int main(int argc, char** argv) { run(); return 0; } #包括 使用名称空间std; int t=20; 布尔是均匀可除的(常数a,常数b){ 对于(int i=2;i,c++,performance,c++11,int,size-t,C++,Performance,C++11,Int,Size T,int通常是最快的全方位类型。该属性不是标准强制要求的,但今天的平台通常也是如此。我们还提供了类似cstdint的int\u fast32\u t这样的东西,它可以更恰当地保证是最快的类型,至少可以容纳32位—强烈推荐用于性能测试-敏感代码 size\u t的目的不是给出一个快速整数。它的目的是提供一个整数,该整数可以容纳平台地址空间中最大大小的对象的大小。通常size\u t相当于CPU支持的最大“本机”整数,但它不一定是 我猜您是在64位平台上。一般来说,64位平台对于32位和64位操作的性

int
通常是最快的全方位类型。该属性不是标准强制要求的,但今天的平台通常也是如此。我们还提供了类似cstdint的
int\u fast32\u t
这样的东西,它可以更恰当地保证是最快的类型,至少可以容纳32位—强烈推荐用于性能测试-敏感代码

size\u t
的目的不是给出一个快速整数。它的目的是提供一个整数,该整数可以容纳平台地址空间中最大大小的对象的大小。通常
size\u t
相当于CPU支持的最大“本机”整数,但它不一定是

我猜您是在64位平台上。一般来说,64位平台对于32位和64位操作的性能大致相同,但您遇到了一个通常不是这样的地方:在64位整数上,div/mod实际上可以慢2-3倍。在这种情况下,如果
int
是32位而
size\t
是64位,则可以很好地解释这个问题


有关更多信息,请参阅指令表文档。对于Intel的Sandy Bridge平台,它显示32位div的延迟为20-28个周期,而64位div的延迟为30-94个周期。

大小由实现定义,如果您运行的是64位机器,大多数编译器将使其长度为8字节


使用8字节整数的运算通常比使用4字节模拟运算慢。

int
是硬件的“自然大小”。这在64位系统中适用吗?int是4字节…我很惊讶GCC没有意识到
I
不能大于
b