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