看板C_Chat
: 瑪奇韓國原廠已經升級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和程式需要大幅度的改正
所以就會有一堆相容性問題
以上是小小的科普
--
※ 批踢踢實業坊(ptt.cc), 來自: 1.171.15.2 (臺灣)※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1675942515.A.C6C.html
推 thesonofevil: 先推 免得人家說我看不懂 02/09 19:39
→ labbat: 早期16bit/32bit爭議跟交流電直流電之爭差不多啦 02/09 19:40
→ labbat: 之後就多了32bit/64bit總是在重複一樣的情境 02/09 19:41
推 lucky0417: 有以下嗎 02/09 19:42
推 SangoGO: 我知道,所以x86比x64好對吧(爆論 02/09 19:44
推 k960608: 先推 02/09 19:48
推 kaioken: 是...這樣遊戲程式更可以運用新的硬體資源嗎? 02/09 19:49
推 forsakesheep: 好像看懂了,又好像沒懂 02/09 19:52