64位CPU上不同整数的效率

时间:2012-09-16 13:47:26

标签: c 64-bit int long-integer

在64位CPU中,如果int是32位而long是64位,那么long是否比int更有效?< / p>

4 个答案:

答案 0 :(得分:8)

您的问题的主要问题是您没有定义“有效”。有几种可能的效率差异。

当然,如果您需要使用64位,那么毫无疑问。但有时你可以使用32位,你想知道使用64位是否会更好。

数据大小效率

使用32位将使用更少的内存。这更有效,特别是如果你使用它们很多。从某种意义上说,它不仅可以更换效率,而且还可以减少缓存丢失。如果你只使用几个,那么效率差异是无关紧要的。

代码大小效率

这在很大程度上取决于架构。一些架构需要更长的指令来操作32位值,其他架构需要更长的指令来操作64位值,而其他架构则没有区别。例如,在intel处理器上,即使对于64位代码,32位也是默认的操作数大小。较小的代码在缓存行为和管道使用方面可能都有一点优势。但它依赖于体系结构,操作数大小将使用更小的代码。

执行速度效率

一般来说,除了代码大小隐含的差异之外,应该没有区别。一旦指令被解码,仅仅执行的时间通常是相同的。然而,再一次,这实际上是架构特定的。例如,有些架构没有本机32位算术。

我的建议:

如果只是一些局部变量或小型结构中的数据没有大量分配,请使用int并以假设大小的方式执行此操作新版本的编译器或使用不同大小的int的其他编译器仍然有效。

但是,如果您有庞大的数组或矩阵,那么请使用您可以使用的最小类型,并确保其大小是明确的。

答案 1 :(得分:3)

在通用的x86-64架构上,32位算术永远不会慢于64位算术。因此,int始终与long的速度相同或更快。在其他实际上没有内置32位算术的架构上,例如MMIX,这可能不成立。

基本智慧认为:在不考虑微观优化的情况下编写它,并在必要时进行分析和优化。

答案 2 :(得分:1)

如果您尝试存储64位数据,请使用long。如果您不需要64位,请使用常规的32位int。

答案 3 :(得分:-3)

是的,64位数字比32位数字更有效。

在64位CPU上,如果你要求长整数,大多数编译器会给你64位。

使用当前编译器查看大小:

#include <stdio.h>

int main(int argc, char **argv){
    long int foo;
    printf("The size of an int is: %ld bytes\n", sizeof(foo));
    printf("The size of an int is: %ld bits\n", sizeof(foo) * 8);
    return 0;
}

如果您的cpu在64位模式下运行,那么无论您要求什么,CPU都可以使用它。所有的寄存器都是64位,操作是64位,所以如果你想获得32位的结果,它通常会将64位结果转换为32位。

我系统上的limits.hlong int定义为:

/* Minimum and maximum values a `signed long int' can hold.  */
#  if __WORDSIZE == 64
#   define LONG_MAX 9223372036854775807L
#  else
#   define LONG_MAX 2147483647L
#  endif
#  define LONG_MIN  (-LONG_MAX - 1L)