作者woodpeaker (woodpeaker)
看板C_and_CPP
标题[问题] 用全域变数不好吗?
时间Tue May 26 17:53:12 2009
不知道为什麽我C++的老师规定
我们写程式不能用全域变数
难道用全域变数比较差吗?
麻烦各位版友回答一下吧 感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.175.106
1F:→ adrianshum:全域变数有它合用的地方, 但初学者肯定会误用. 你就当 05/26 17:57
2F:→ adrianshum: global var is evil 吧, 对初学者而言比较好 05/26 17:57
3F:推 zlw:存活时间太久,记忆体空间跟变数名称都一直占着 05/26 18:26
4F:→ james732:我觉得它跟goto是同等级的利器 XDDD 05/26 18:50
5F:→ james732:Linux kernel 里有很多全域变数 也有很多 goto XD 05/26 18:54
6F:→ VictorTom:写code不是玩机战啊~~地图兵器不要乱放....XD 05/26 18:54
7F:推 chchwy:滥用全域变数会让程式快速接近崩溃边缘....... 05/26 19:24
8F:推 Ebergies:还好吧, 蛮好用的啊 05/26 19:38
9F:推 ianfang:debug不易 很容易不知道是谁改了他 因为随便就能改 05/26 19:42
10F:→ OgamiIchiro:大型程式用太多global variable可能会造成memory不足 05/26 19:46
11F:→ OgamiIchiro:而且练习memory的控管很重要 05/26 19:47
12F:推 stonehomelaa:会让function之间相依性太高 如果要修改 会改到死 05/26 19:49
13F:推 varg:怕手残改到而已 小程式当然无所谓 05/26 19:50
14F:推 QQ29:可以请大家举例说什麽情况 就不该使用global吗? 05/26 20:11
15F:→ QQ29:像有些就觉得不写成global好像就不会写了..... 05/26 20:11
16F:推 stonehomelaa:楼上说说看非用global variable的情况吧 05/26 20:18
17F:推 legnaleurc:signal handler 的 flag 05/26 22:03
18F:→ softwind:跨档案的变数 global吧 cin/cout... 物件算吗? 05/26 22:29
19F:→ softwind:全域变数和goto 都很好用! 05/26 22:30
20F:→ tinlans:global var 最大的危险就是会存取到上一次迭代留下的遗迹 05/26 23:31
21F:→ tinlans:,所以必须要特别花时间留意适时的 reset 它们的值。 05/26 23:32
22F:→ tinlans:另外它可能会引发效能问题,某些平台全域变数存取很慢。 05/26 23:34
23F:推 softwind:global var 的最大危险 是我觉得不得不的解法 05/27 00:15
24F:推 legnaleurc:scope 太大 ... 难 debug 05/27 01:14
25F:推 wowtiger:global 最容易知道被谁改吧 ... 05/27 01:27
26F:→ wowtiger:而且 global 又不一定不好 只要知道 4k memory block 05/27 01:28
27F:→ wowtiger:反而可以有效节省空间 05/27 01:28
28F:推 TroyLee:"global 最容易知道被谁改吧" 除非整个程式码你都看的到 05/27 02:51
29F:→ OgamiIchiro:local variable如果运算错误 可以很明显知道是该 05/27 02:57
30F:→ OgamiIchiro:function内部的问题 但如果是global variable 05/27 02:57
31F:→ OgamiIchiro:尤其是那种非常多function都会去access的 05/27 02:58
32F:→ OgamiIchiro:当你一个program花1s run完 可能就被改了数百次以上 05/27 02:59
33F:→ OgamiIchiro:遇到这种情形就很难找出到底从哪里开始错的 05/27 02:59
34F:→ OgamiIchiro:如果是遇到更棘手的情形: 该variable中间有几次的 05/27 03:01
35F:→ OgamiIchiro:算出错 但是後来又因为一些特例变成对的 05/27 03:01
36F:→ OgamiIchiro:结果造成debug 没de出来 很可能会在demo的时候就 05/27 03:02
37F:→ OgamiIchiro:出纰漏 05/27 03:02
38F:推 Ebergies:global 最不容易知道是谁改 xD 05/27 09:55
39F:推 gozha:为了效能勉强可接受..但是养成习惯就惨了 05/27 10:11
40F:→ tinlans:global variable 的存取效能在某些平台上很差喔。 05/27 11:27
41F:→ tinlans:load/store 架构,有 GOT 的通常会有两次 memory access。 05/27 11:29
42F:推 wowtiger:恩... 有玩过可以下 memory breakpoints 应该知道吧 05/27 23:22
43F:→ meltice:struct的member被其他pointer指来指去 05/28 09:51
44F:→ meltice:这样会比global更清楚被谁改的麽? 05/28 09:52
45F:→ meltice:乾脆不要用pointer好了 pointer是很危险的东西 05/28 09:52