[問題] C的local variable初始化為什麼要無定義?

作者: OoShiunoO (機機勳)   2017-04-30 21:32:17
請問一下,在C語言中
局部變量若沒顯式定義的話,他不會像全域變量一樣預設0
這樣設計的理由是什麼呢?
以前我都不會理這個問題,只是最近在學計組和compiler
突然覺得需要搞懂~
作者: james732 (好人超)   2017-04-30 22:52:00
藉機問一下,.bss的變數有保證會初始為0嗎?
作者: descent (「雄辯是銀,沉默是金」)   2017-04-30 23:08:00
https://goo.gl/oRNoHi 6.7.8 看來是 c 標準的規定
作者: b0920075 (Void)   2017-05-01 03:15:00
Linux下.bss段就是給這個segment一個zeroed pages所以一定會是0八
作者: CoNsTaR ((const *))   2017-05-01 03:58:00
變量…
作者: LPH66 (-6.2598534e+18f)   2017-05-01 09:12:00
只宣告那編譯器只要劃空間過去就好, 不用多一道指令搬資料
作者: ronin728 (浪人)   2017-05-01 09:22:00
因為C有可能會使用Stack存放變數,所以會讀到之前的資料如果不這樣,那就表示每次都要隱式清理,估計是效能考量
作者: james732 (好人超)   2017-05-01 10:56:00
stack的處理方式比bss麻煩多了,每個function都要清
作者: LenaPark   2017-05-01 15:13:00
因為效率從84頁開始看,或從頭看完. https://goo.gl/GMJ1DS
作者: Killercat (殺人貓™)   2017-05-04 08:15:00
有個更有趣的事實,大多數編譯器debug下會做相反的事情寫入一個特定數以方便debug不過這個特定數一定不是0就是 XD
作者: tinlans ( )   2017-05-05 21:40:00
少數 MCU 廠會要求不要把 bss 清 0 XD
作者: james732 (好人超)   2017-05-05 21:53:00
什麼,不把bss清0有什麼好處嗎?
作者: Killercat (殺人貓™)   2017-05-06 10:11:00
之前寫kernel lib有use case,該app是拿來dump的而dump可以直接把記憶體宣告到特定位置上 不清空就可以免去一次copy的時間,不知道上面提的MCU是不是類似case

Links booklink

Contact Us: admin [ a t ] ucptt.com