作者wtchen (沒有存在感的人)
看板C_and_CPP
標題[問題] 在函式中重新宣告變數比較好還是用static
時間Fri Oct 16 22:34:39 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux + gcc
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
這應該是基本問題,不過我google不到,所以請各位指教
若一個程式包含兩檔案:func.c, main.c
main.c :
int main(void) {
int i;
for (i=0; i<100000; ++i) test();
return 0;
}
func.c : 這個檔案含有函式 test()
寫法1 :
void test(void) {
int i;
for (i=0; i<10000000; ++i) {
........(這邊跟i有關不重要)
}
}
寫法2:
static int i ; // (這邊如果沒用static會不會跟main.c的i有互相干擾的問題?)
void test(void) {
for (i=0; i<10000000; ++i) {
........(這邊跟i有關不重要)
}
}
請問這兩種寫法哪種比較好?
把常用變數的reference留在同樣位子會不會比一直宣告清除來的好?
謝謝
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.195.25
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1445006082.A.2EB.html
推 stupid0319: static 不是都寫在含數內的嗎XD= =? 10/16 23:17
推 LPH66: 如果真的是那麼時常呼叫的話, 區域變數多半會在相近的位置 10/16 23:18
→ LPH66: 就算稍有不同, 記憶體快取都是一個區塊為主 10/16 23:18
→ LPH66: 因此不會有太頻繁的 cache miss 10/16 23:19
→ LPH66: 所以就放心宣告區域變數吧 10/16 23:19
推 Bencrie: static 寫在 global 表示不匯出。其他 source 看不到 10/17 01:27
→ wtchen: 感謝 10/17 02:35
推 EdisonX: 如果這個func未來被多行緒呼叫時,static宣告的會死很慘 10/17 09:26
→ MOONRAKER: i很便宜 不要在小地方那麼摳門好嗎 10/17 14:02
推 ronin728: 這種寫法沒省多少空間時間,又很危險 10/17 14:42
→ kobe8112: i很便宜是什麼東西啦XDDD 10/27 15:21