※ 引述《kopune (谈崩专家 康普尼)》之铭言:
: 玛奇韩国原厂已经升级64位元一段时间了
: 台版则是下礼拜(2/16)要升级
: MMORG升级64位元有什么实质好处阿?
: 可以减少位移吗?
: 现在游戏大多是直接64位元了吧?
首先讲益处之前要先认识一下
所谓的32/64/....位元程式 那个位元代表的是啥意思
大家都知道位元,是指一种电脑容量单位,英文为bit(s)
那这里的容量,又是指啥呢?
内存/硬盘/程式? 都不是
而是指电脑(CPU)处理一道程序的单位大小
大家都知道不论何种程式语言,用compile编译(加link)后
运送到电脑/OS/内存/CPU/暂存器 后都会变成数位的0和1(支语:数字)
最后用一堆NAND之类的逻辑闸(底层变成一堆npn pnp半导体)运送电子
而32/64/...位元 则就是运行一道指令单位需要多少个0/1
这时就会有资工系教授/面试官会考以下问题:
请问以下程式指令最后输出会是啥?
int *a;
int b;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(b));
printf("%d\n",sizeof(&b));
之类的....
所以越多位元,代表一道指令有更多的0/1 , 则会有更多的变化
不考虑op code/暂存器/内存位址
32位元 一道指令就有2^32种变化
而64位元 则是有2^64种变化
所以32与64位元不单单只是差两倍
知道原理后就小讲一下变成64位元的益处
大家(电虾老板)都知道,32位元处理器的电脑 内存最高只能塞4G
但很少人知道为何
电脑不只资料用0/1储存,程式也一样
一般程式大部分都会躺在硬/软/光盘 (现行有的会躺在云端?)
要运作时才会把程式有上述储存装置转移到内存
然后利用CPU(与内部的暂存器)去读/写里面的内存,运作里面的程式
假设不考虑op code,单纯只是要寻址内存每个区块
32位元电脑 寻址长度最高也就只有32位元长度
所以最多可寻址2^32(0~2^32-1)
又每个cell假设为1byte(刚好是电脑处理资料最小单位)
那这样电脑最多只能寻址2^32 * 1byte(s) = 4GB
所以4GB就是这样来的
多余的内存除非用特殊的指令,不然一般无法使用到
所以升到64bit首先最有感的就是内存可以变大
那内存变大有何好处: 最明显感受到就是运作变快(先不考论程式品质等等其他因素)
上述说过,程式一般都会躺在硬盘,需要用时才会转移到内存
所以假设要运行16GB的程式
32bit就得要搬移4次程式,而64bit只需搬移一次(假设内存设置>=16GB)
硬盘运作速度明显远慢于内存/暂存器运作速度
所以搬移硬盘越多次,速度就会拖越慢
由于64bit比32bit搬移次数少,所以运行得比较快
再来是指令本身
32bit指令只有2^32种变化,而64bit则更多
所以64bit可以把很多行32bit指令融合成一个变新的指令
像是某个步骤32bit需要跑3次,而64bit可能只要跑一次
在频率相同状况下,64bit这样就会比32bit快3倍
所以改64bit运行速度会加快
但是由于指令不同,所以不论是OS和程式需要大幅度的改正
所以就会有一堆相容性问题
以上是小小的科普