作者OoShiunoO (機機勳)
看板C_and_CPP
標題[問題] C的local variable初始化為什麼要無定義?
時間Sun Apr 30 21:32:17 2017
請問一下,在C語言中
局部變量若沒顯式定義的話,他不會像全域變量一樣預設0
這樣設計的理由是什麼呢?
以前我都不會理這個問題,只是最近在學計組和compiler
突然覺得需要搞懂~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.38.163
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1493559140.A.C23.html
1F:推 james732: 藉機問一下,.bss的變數有保證會初始為0嗎? 04/30 22:52
3F:推 b0920075: Linux下.bss段就是給這個segment一個zeroed pages所以 05/01 03:15
4F:→ b0920075: 一定會是0八 05/01 03:16
5F:→ CoNsTaR: 變量… 05/01 03:58
6F:推 LPH66: 只宣告那編譯器只要劃空間過去就好, 不用多一道指令搬資料 05/01 09:12
7F:→ ronin728: 因為C有可能會使用Stack存放變數,所以會讀到之前的資料 05/01 09:22
8F:→ ronin728: 如果不這樣,那就表示每次都要隱式清理,估計是效能考量 05/01 09:23
9F:推 james732: stack的處理方式比bss麻煩多了,每個function都要清 05/01 10:56
10F:推 LenaPark: 因為效率 05/01 15:13
12F:→ Killercat: 有個更有趣的事實,大多數編譯器debug下會做相反的事情 05/04 08:15
13F:→ Killercat: 寫入一個特定數以方便debug 05/04 08:15
14F:→ Killercat: 不過這個特定數一定不是0就是 XD 05/04 08:16
15F:→ tinlans: 少數 MCU 廠會要求不要把 bss 清 0 XD 05/05 21:40
16F:→ james732: 什麼,不把bss清0有什麼好處嗎? 05/05 21:53
17F:→ Killercat: 之前寫kernel lib有use case,該app是拿來dump的 05/06 10:11
18F:→ Killercat: 而dump可以直接把記憶體宣告到特定位置上 不清空就可以 05/06 10:11
19F:→ Killercat: 免去一次copy的時間,不知道上面提的MCU是不是類似case 05/06 10:12