给每个菜鸟程序员的修养之道
(程序员的自我修养——链接、装载和库读后感)
中国科学技术大学软件学院
黄睿
原创作品版权所有转载请注明出处
CPU体系结构,汇编,C语音(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如少林寺的《易筋经》,是最为基础又是最上乘的武功;学会了《易筋经》,你将无所不能,任你创造武功;学会了编程中的“易筋经”,大师们可以任意开发操作系统,编译器,甚至是开发一种新的程序设计语言又或是全新的操作系统!
—————佚名
如果你是高手,Linux Hacker或者geek,请绕行
但如果你是新手
如果你曾好奇过windows系统目录下和软件目录下大堆大堆的dll文件是什么
如果你曾疑惑过我写下的代码经历的怎样的历程最后怎样到达了内存,编译器每天用,它到底做了什么
如果你已经学习或接触了C,汇编,计算机结构,但还是没办法把三者的关系理的很顺很清或者对应起来
那么深入研读一下这本书绝对是对你的一大帮助
——--“豆瓣书评”
正文:
大约是在考研的时候在多看上看见了此书,初听书名还以为是本讲述诸如编程思维锻炼一类的书籍,也就不在我阅读计划之列。直到来科大读研时候,诧异的发现,此书赫然是华保健老师讲述的信息安全课程推荐教材同时亦是孟宁老师推荐读物,遂借旁人书一阅,阅之欲罢不能,购买之,用了月余时间拜读之。
介绍完了我看此书的来龙去脉,那这本书究竟讲述的是什么呢?
《程序员的自我修养》书名很霸气,但是其实书中内容都概括在小标题中了,即链接、装载和库。
你可能会问我们为什么要掌握这些知识,我不了解这些,可是并不妨碍我写出漂亮的代码啊
然而作为一个程序员,也许一辈子都不了解这些底层知识,仅仅用掌握的编程技巧,各种奇妙的API函数,也可以编出合格的程序来,但是就像侯捷形容不了解MFC的机制而使用MFC编程的人那样,“编出的只是一些拼积木一样的玩具”。
只知所以然,而不知其所以然。
而通过学习这本书我们能够窥探编程软件的运行机制和原理,譬如最简单的Hello world程序(c/c++)的运行可以分解成四个主要的步骤:分别是预处理(主要处理那些以“#”开始的预编译指令,将.c文件和与之相关.h文件通过被预编译器预编译成一个.i/.ii文件);编译(将预编译器处理后的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件);汇编(将编译后得到的汇编代码文件翻译成本地机器能运行的机器指令,此时可得到目标文件“非执行文件”);为什么汇编后还不是得到执行文件呢?这里涉及第四个步骤链接(将一系列的目标文件组合链接起来最终生成目标执行文件)。
这样我们就能将我们所学过的C,汇编,编译原理操作系统的知识给串联起来,深刻的了解我们所写程序是如何变成可执行文件的,从代码的预处理,编译,汇编,到链接生成执行文件的结构,到运行态时对程序内存的分配,都有了一个整体的感觉,增强了我们对程序的控制力,不再有雾里看花的感觉。