※ 引述《cixooo.bbs@bbs.ntit.edu.tw (擎羊嘯天)》之銘言:
> #define PI 3.14
> const float PI=3.14
> 對我們來說都是將PI設定成常數
> 那對c編譯器來說有什麼不一樣呢?
第一個會變成常數才丟進編譯器,
第二個則是變數。
使用第一種方法,
在多數 RISC machine 上效率會比較差,
因為 RISC 的指令長度一般都不可變,
所以立即值欄位的寬度有限,
產生 64-bit 浮點數至少要兩道指令或更多,
甚至可能產生 constant pool 然後用 pc-relative load 來取值,
造成 2 次 memory accessing(如果是 loop 內的話 cache 都會 hit 就還好),
事實上大多數 32-bit RISC machine 光要產生一個 32-bit integer,
就可能需要兩道或更多指令了...
在使用常數比變數還快的 machine 上,
編譯器是有可能幫我們把第二種方法的 PI 轉換為常數。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-138-185.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎