作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1445006082.A.2EB.html
1F:推 stupid0319: static 不是都写在含数内的吗XD= =? 10/16 23:17
2F:推 LPH66: 如果真的是那麽时常呼叫的话, 区域变数多半会在相近的位置 10/16 23:18
3F:→ LPH66: 就算稍有不同, 记忆体快取都是一个区块为主 10/16 23:18
4F:→ LPH66: 因此不会有太频繁的 cache miss 10/16 23:19
5F:→ LPH66: 所以就放心宣告区域变数吧 10/16 23:19
6F:推 Bencrie: static 写在 global 表示不汇出。其他 source 看不到 10/17 01:27
7F:→ wtchen: 感谢 10/17 02:35
8F:推 EdisonX: 如果这个func未来被多行绪呼叫时,static宣告的会死很惨 10/17 09:26
9F:→ MOONRAKER: i很便宜 不要在小地方那麽抠门好吗 10/17 14:02
10F:推 ronin728: 这种写法没省多少空间时间,又很危险 10/17 14:42
11F:→ kobe8112: i很便宜是什麽东西啦XDDD 10/27 15:21