你的问题的主要问题是你没有定义"有效".有几种可能的效率差异.
当然,如果你需要使用64位,那么毫无疑问.但有时你可以使用32位,你想知道使用64位代替它会更好.
数据大小效率使用32位将使用更少的内存.这更有效,特别是如果你使用它们很多.从某种意义上说,它不仅可以更换效率,而且还可以减少缓存丢失.如果你只使用几个,那么效率差异是无关紧要的.
代码大小效率这在很大程度上取决于架构.一些架构需要更长的指令来操作32位值,其他架构需要更长的指令来操作64位值,而其他架构则没有区别.例如,在intel处理器上,即使对于64位代码,32位也是默认的操作数大小.较小的代码在缓存行为和管道使用方面可能都有一点优势.但它依赖于体系结构,操作数大小将使用更小的代码.
执行速度效率一般来说,除了代码大小隐含的差异之外,应该没有区别.一旦指令被解码,仅仅执行的时间通常是相同的.然而,再一次,这实际上是架构特定的.例如,有些架构没有本机32位算术.
我的建议:
如果它只是一些局部变量或小结构中的数据,你没有大量分配int,请以不假设大小的方式使用和执行它,以便新版本的编译器或使用不同的编译器大小int仍然有效.
但是,如果您有大型数组或矩阵,则使用您可以使用的最小类型,并确保其大小是显式的.
在常见的 x86-64 架构上,32 位算术永远不会慢于 64 位算术。所以int速度总是相同或比 更快long。在其他实际上没有内置 32 位算术的体系结构(例如 MMIX)上,这可能不成立。
基本智慧是:编写时不要考虑此类微观优化,如有必要,请进行分析和优化。
Wol*_*lph -3
是的,64 位数字比 32 位数字更有效。
在 64 位 CPU 上,如果您要求使用 long int,大多数编译器都会为您提供 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您的 cpu 在 64 位模式下运行,您可以预期,无论您要求什么,CPU 都会使用该模式。所有寄存器都是64位的,操作也是64位的,所以如果你想获得32位结果,它通常会为你将64位结果转换为32位。
我的系统limits.h上的 定义long 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3861 次 |
| 最近记录: |