Re: [問題] 基本觀念的小問題
※ 引述《rosemary0401 (rosemary0401)》之銘言:
: Question 1:
: int funA(int i)
: {
: return i+1;
: }
: char funB(char i)
: {
: return i+1;
: }
: 請問funA和funB哪個比較快呢??為什麼??
: Question 2:
: 用 #define A 50
: 和 int A = 50;
: 哪個方法比較快呢??為什麼??
: 用 #define 來定義函數,執行起來會比較快嗎??
1. 這個應該跟對齊有關。在32位元的系統中, 如果資料不是32位元的整數倍, Compiler
就會加入額外的機器碼來對齊資料, 所以會稍微慢一點。印象中是這樣。
2. 你想問的應該是巨集跟直接寫程式碼哪個比較快。我說啊, 你拿這個來比根本立足點
不同。以前課本的說法是, 巨集展開時會比較浪費Compile time, 目的碼比較肥(因為
是文字代換), 但是速度比較快。而函數呼叫Compile比較快, 目的碼比較瘦, 但是執行
比較慢。但你舉的例子完全無法比較速度, 因為你的#define會在編譯後直接變成程
式的r-value去了, 怎麼跟int A比啊?要嘛也是這樣比吧...
#define SWAP(a, b) (a^=b^=a^=b)
---
void swap(int &a, int &b)
{ a^=b^=a^=b; }
這樣我們就可以說SWAP比swap快一點, 但是目的碼肥一點, 而swap慢一點, 因為要推
東西進SS, 又要彈東西出SS, 還要維護EBP之類的。但是瘦一點就是。
但是在寫程式時, 千萬不能濫用巨集。否則你會嘿嘿嘿~~程式會變得像鬼畫符一樣。
更要命的的, 巨集沒有型別檢查的機制, 所以就算有亂七八糟的結果也不意外。
現在有inline-function, 用這個就很好了。
這些是很久以前的記憶了, 如果講錯的話, 請多包涵...
--
裸になって
何が悪い?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.57.76
→
08/30 00:10, , 1F
08/30 00:10, 1F
→
08/30 02:10, , 2F
08/30 02:10, 2F
→
08/30 02:11, , 3F
08/30 02:11, 3F
→
08/30 02:12, , 4F
08/30 02:12, 4F
→
08/30 02:13, , 5F
08/30 02:13, 5F
推
08/30 13:23, , 6F
08/30 13:23, 6F
討論串 (同標題文章)