作者OoShiunoO (机机勳)
看板C_and_CPP
标题[问题] C的local variable初始化为什麽要无定义?
时间Sun Apr 30 21:32:17 2017
请问一下,在C语言中
局部变量若没显式定义的话,他不会像全域变量一样预设0
这样设计的理由是什麽呢?
以前我都不会理这个问题,只是最近在学计组和compiler
突然觉得需要搞懂~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.230.38.163
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1493559140.A.C23.html
1F:推 james732: 藉机问一下,.bss的变数有保证会初始为0吗? 04/30 22:52
3F:推 b0920075: Linux下.bss段就是给这个segment一个zeroed pages所以 05/01 03:15
4F:→ b0920075: 一定会是0八 05/01 03:16
5F:→ CoNsTaR: 变量… 05/01 03:58
6F:推 LPH66: 只宣告那编译器只要划空间过去就好, 不用多一道指令搬资料 05/01 09:12
7F:→ ronin728: 因为C有可能会使用Stack存放变数,所以会读到之前的资料 05/01 09:22
8F:→ ronin728: 如果不这样,那就表示每次都要隐式清理,估计是效能考量 05/01 09:23
9F:推 james732: stack的处理方式比bss麻烦多了,每个function都要清 05/01 10:56
10F:推 LenaPark: 因为效率 05/01 15:13
12F:→ Killercat: 有个更有趣的事实,大多数编译器debug下会做相反的事情 05/04 08:15
13F:→ Killercat: 写入一个特定数以方便debug 05/04 08:15
14F:→ Killercat: 不过这个特定数一定不是0就是 XD 05/04 08:16
15F:→ tinlans: 少数 MCU 厂会要求不要把 bss 清 0 XD 05/05 21:40
16F:→ james732: 什麽,不把bss清0有什麽好处吗? 05/05 21:53
17F:→ Killercat: 之前写kernel lib有use case,该app是拿来dump的 05/06 10:11
18F:→ Killercat: 而dump可以直接把记忆体宣告到特定位置上 不清空就可以 05/06 10:11
19F:→ Killercat: 免去一次copy的时间,不知道上面提的MCU是不是类似case 05/06 10:12