TimothyQiu's Blog

keep it simple stupid

看完了《C专家编程》

分类:技术,闲扯

最近终于把闲置良久的《C 专家编程》(Expert C Programming)看完了!光看书名挺可怕的,但它确实是一本读起来很轻松的技术书,我最初就是冲着穿插在正文和每章结尾的八卦去的。最喜欢第六章(运动的诗章:运行时数据结构)和第七章(对内存的思考),因为真的让人有茅塞顿开的感觉。

static 关键字的解释

C 语言的 static 关键字,其作用有二:修饰静态变量;将变量或者函数的作用域限制在文件范围。这两个技能怎么看都没有什么直接联系,以至于连作者都脚注「你可能会奇怪 static 的意义会相差如此之大」。于是我之前一直用「它就是这么定义的,你能怎么着?」来说服自己。

看完第六章和第七章,我终于可以用一个像样的理由来解释 static 这个奇怪的家伙了:它的主要作用是把被修饰的变量放到数据段(这样相对于不断在栈上生生死死的自动变量就「静态」得名至实归了),捎带着还会把被修饰的变量/函数的作用域限制得尽可能小。

由于所在的位置是数据段,这也解释了为什么静态变量和全局变量默认会被初始化为零(物理零)的问题 :)

对内存泄漏的看法

早在学习 C 之前就一直听大家把「内存泄漏」描述得跟巫师们描述伏地魔似的,所以后来虽然觉得指针什么的并不是什么很特别的东西,但对内存分配和回收什么的总是特别小心。以至于后来学了 C++ 之后觉得 RAII 什么的真是神器啊~恨不得以后再也不用裸指针了……

没错,这是好事。但内存泄漏也并不是不能放进一丝一缕:因为程序退出时操作系统会把分配给程序的内存块(重点在于这里也包括「堆」)一并回收,那么在程序即将退出时去释放那些在整个程序的生命周期内只会申请一次的内存是不是重复劳动,反而加重了系统的负担呢?

嗯~以上就是看完书最大的两点收获。另外第一次看第三章末尾八卦部分「一时间,可乐机似乎很快将成为 Internet 上最常见的硬件系统」的时候笑抽了 ^q^

C

添加新评论 »