当我的生活只剩下写代码时

来源:互联网 发布:二手车价格怎么算法 编辑:程序博客网 时间:2024/05/03 17:27

我对很多事物都充满好奇,很想探究其中的原理及背后的东西。

记得大一那时,想自己做一个网站,于是到图书馆看HTML的书,那时恰好有个关于网站的比赛,于是以此为借口,买了台电脑——更好的借口是为了学习C语言。结果没搞成网站,C语言也学得一塌糊涂。如今,自己的网站已经运行一年多了,自己一个人慢慢写点技术文章放上去,版式改了又改,对HTML和CSS也有点认识了,也运用于自己写的文档中;C语言依然在学,不过将它的范围扩展到很多地方,不单单认为C语言就是C语言,它跟其它很多东西都有联系。现在更明白计算机这东西,也明白操作系统是怎么运行的,当其他人对计算机的一些不可理喻的行为迷惑时,也能指出一二。

我学Linux同样是出于好奇,总想了解这个系统,其实我也不知道这个系统到底哪里吸引了。如今,当这个东西成为吃饭的家伙时,这个问题已经不重要了。

 

当我知道有hexdump这个命令时,对在windows和linux下编辑的文本文件进行查看,对“回车”、“换行”有了感性的认识。知道在windows下用记事本打开linux下的源代码文件时会出现很多黑色的方框。继而使用了UE、notepad++。

后来,又对字符编码有了认识,比如一些网页出现了乱码,可能就是编码不正确,在使用SSH和SecureCRT登陆服务器时,终端也会出现乱码,一般现在都使用了utf-8了。如果在源代码中出现中文字符——无论是注释还是使用printf打印,如果不是用utf-8保存源文件的话,运行也不显示正常的中文,但是,如果使用utf-8,gcc的一些版本又不支持(网上说低于4.5.0)。后来在notepad++中找到一种叫“UTF-8无BOM格式编码”,这个格式可以在低版本中编译通过。现在,凡是代码中出现中文,都会使用这个格式保存。对于ANSI和UTF-8格式,同样又用hexdump查看,加深印象。

其实,在网上直接复制的代码,极有可能由于编码而导致出现很奇怪的编译错误。因为复制得到的代码隐含了中文字符。一般地,在写代码中要注意是英文状态还是中文状态,此外还要注意“半角”、“全角”。

 

半年前开始接触u-boot,花了很多时间看它的代码。慢慢地,巩固了C语言基础,对进程在内存的的分布也有了深刻的理解。最大的收获就是对“指针”、“地址”的认识。有时无聊,便将得到的u-boot.bin用UE打开,看看里面的二进制,又用objdump将u-boot反汇编,结果发现u-boot.bin那些二进制就是u-boot反汇编得到的指令,这在某一程度上是废话,不过不知道有多少人去尝试。以前由于疏忽,导致从内存复制到Flash的数据是反过来的,也是这个时候,开始看二进制数据,进行对比。这也更深刻知道大小端格式了。

u-boot中有一个go的命令,直接将程序下载到内存某个地址中,使用go就可以执行了,仔细看do_go函数,发现内容不多,这个函数调用do_go_exec函数,而这个函数的第一个参数就是一个函数指针,这个函数直接返回函数指针。——就这么简单。原来,它认为下载到那个地址的程序是合法并能运行的,于是直接跳到那个地址上执行。这里,“函数”、“指针”、“地址”什么的,似乎都是一体了。

 

刚开始学计算机时,完全不懂程序是怎么运行的,现在似乎有点懂了。但是,如果让我对非计算机专业的人讲解,却说不出所以然,我估计画一张内存图,讲进程的加载,估计很多人不会明白这代表什么意思。其实也没必要,他们知道可以用计算机做很多事就行,当我们看美国大片时,完全不用理会播放器如何加载影片,显卡是如何工作的,我们的任务就是观赏电影。

原创粉丝点击