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