※ 引述《fantasychiu.bbs@ptt.cc》之銘言:
> ※ 引述《enjoydance.bbs@bbs.ntnu.edu.tw (苦力國標魔羯男)》之銘言:
> : 樓上的答案錯誤吧...@@...
> : int 32 bits 並不是因為CPU的通用暫存器的緣故..
> : 而是程式的定義就是設定成一個整數的數值範圍可以有2的32位元..
> : 改成64位元的CPU並不會改變int的定義長度...@@
> 的確可以變64bits喔
> 存脆是看compiler怎麼做
> 但是64bits的cpu用32bits的int會白白浪費另外32bits
其實也還好,
因為現在 C99 給了 programmer 另一種選擇,
<stdint.h> 有定義 int32_t int64_t 這類 types,
如果 programmer 想要直接指定 bit 數的時候,
可以使用這些 types。
64-bit CPU 運算的資料,
如果從來都不會超出 32-bit 表示範圍的話,
就算 data size 有 64-bit 也是一樣浪費,
反倒是做成 32-bit 還有機會讓 compiler 最佳化成 SIMD 指令,
這個部分就是要看 compiler 設計者的想法了。
當然從這一點也看得出來,
並不是把任何 program 的 source code 用 64-bit platform compiler 重新編譯,
就能擁有針對 64-bit CPU 而寫的 program 相同的效能。
我個人是很少繼續用 int short long 和 long long 來寫 code 了,
因為事實上有不少 code 還是需要確定某些 types 的值域才行;
不過 <stdint.h> 也是有個敗筆,
就是它的 types 都是 typedef 出來的,
當用到 int8_t 和 uint8_t 的時候,
它的實際行為跟 signed char 和 unsigned char 相同,
一些 console I/O function 接到這些變數還是採用 char 版本的模式,
這個部分就只能自己稍微注意一下了。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Undecided
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:61-230-225-43.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎