LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: csfrank

[体系结构]64bit 究竟比 32bit 快在哪里?

[复制链接]
发表于 2006-10-18 16:32:25 | 显示全部楼层
我不清楚,猜一下.错了别笑我.
要是64位的用64位的指令集,那么指令的执行效率会不会比32位的高?
回复 支持 反对

使用道具 举报

发表于 2007-12-4 11:37:21 | 显示全部楼层
你学过计算机组成原理没?
回复 支持 反对

使用道具 举报

发表于 2007-12-6 00:07:53 | 显示全部楼层
Post by hendric;1565741
In fact, sizeof(int)=4 and sizeof(long)=8 on gcc


On my P4, both sizeof(int) and sizeof(long)  is 4

  1. waterzh@LittleBoy ~ $ cat test.c
  2. #include <stdio.h>
  3. main()
  4. {
  5.     printf("sizeof(int)=%d, sizeof(long)=%d, sizeof(long long)=%d, sizeof(double)=%d\n",
  6.             sizeof(int), sizeof(long), sizeof(long long), sizeof(double));
  7. }
  8. waterzh@LittleBoy ~ $ gcc test.c
  9. waterzh@LittleBoy ~ $ ./a.out
  10. sizeof(int)=4, sizeof(long)=4, sizeof(long long)=8, sizeof(double)=8
  11. waterzh@LittleBoy ~ $
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-12-6 00:15:18 | 显示全部楼层
Post by csfrank;1565269
嗯,有道理,64位的cpu确实比32位的增加了几个64位的寄存器。
只不过工作在32位模式下的时候,这些寄存器被关闭了而已。
我其实也一直在纳闷:用到 long long 类型的程序好像并不多啊!
另外纳闷的是 int 类型在64位cpu上是不是64位?如果是,那么long类型呢?
这么说岂不是 int = long = long long ,呵呵,多没意思


有些场合会用到,可能这些场合并不常用c/c++的,处理宽度上的细节被忽视了。
16位32的转换,也经过那么多年了,不是还有很多程序的数据是用16位吗?

有兴趣的可以查查16bit->32bit的历史,我也想知道那时发生了什么事情,大概什么时候64位应用程序会盛行?
回复 支持 反对

使用道具 举报

发表于 2008-7-19 17:55:07 | 显示全部楼层
在 Debian v4.0 r3 for i386 和 for amd64 中运行 benchmark 类测试软件, 有一倍的差距. 很可观!
回复 支持 反对

使用道具 举报

发表于 2008-7-24 15:45:22 | 显示全部楼层
版主,字长和速度有关系吗,字长是决定CPU运算精度的,主频才是标识其运行速度的
回复 支持 反对

使用道具 举报

发表于 2008-7-29 09:18:04 | 显示全部楼层
Post by csfrank;1564057
遗憾小弟不是计算机专业,没有深入研究过cpu,所以目前只是知道在寻址上,64bit有先天优势,但是在4G以下内存的系统上无用武之地。
那么在执行程序上,究竟64bit比32bit优异在哪里呢?是不是每个时钟周期可以多执行几个指令什么的?


我觉得,有这个疑问的人最应该看当年关于K8的一篇纯技术文章。

简单的讲,是这样的:64位比32位本身,没有什么太大优势。但是x86_64指令比i386指令要有更高的效率。这个效率是CPU体系结构决定的。这个优势仅仅作用于现在的x86 体系的 64位vs 32位。

对于其他的CPU,例如MIPS,64位跟 32位也许(我是说也许)没有什么区别。

对于x86体系,我们已知x86_64指令具有许多先进的指令,缺省支持SSE,寄存器数量多一倍,大小也大一倍,编译出来的指令数量就会少,执行效率会高。

——这个优势不是64vs32带来的,仅仅是因为x86_64指令本身比i386指令的优势。——因为这是指令集方面的优势,所以程序必须重新编译才能体现出优势。
回复 支持 反对

使用道具 举报

发表于 2008-10-21 02:13:07 | 显示全部楼层
当初从16到32位的时候,应该是因为寻址空间只有1M的限制,才会出现32位的吧,CPU的速度和寻址应该是不同的,虽然32位的CPU比以前16位的CPU快的很多,但是这个速度是CPU工艺和主频决定的。
回复 支持 反对

使用道具 举报

发表于 2009-2-8 17:59:54 | 显示全部楼层
没错,主要是内存的发展,如果PC内存都到10GB,那么64位是必然的。
回复 支持 反对

使用道具 举报

发表于 2009-9-11 09:35:24 | 显示全部楼层
Post by csfrank;1565269
嗯,有道理,64位的cpu确实比32位的增加了几个64位的寄存器。
只不过工作在32位模式下的时候,这些寄存器被关闭了而已。
我其实也一直在纳闷:用到 long long 类型的程序好像并不多啊!
另外纳闷的是 int 类型在64位cpu上是不是64位?如果是,那么long类型呢?
这么说岂不是 int = long = long long ,呵呵,多没意思


x86有8个32位通用寄存器和8个64位SSE寄存器
x86_64有16个64位通用寄存器和16个128位SSE寄存器。
光论寄存器的数量,就足够带来10%以上的性能提升。

long long=64bit, 仅仅在 32位架构中使用64bit数据时才使用。在64位系统中,它的含义同long。
long=缺省的指针宽度,32位中是32,64位中是64。
int=缺省的整数宽度。对于我们接触得最广泛的x86_64这个架构中,缺省的整数宽度是32。(有些其它的64位架构缺省的整数是64。这个要依靠CPU类型而定。)

x86_64架构的缺省指针宽度与缺省整数宽度不同,这造成了int和long的大小不同。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表