[问题] 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