精華區beta Programming 關於我們 聯絡資訊
※ 引述《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"的狂狷不馴;屬於年少的輕狂色彩