请问一下,在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