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