【读书笔记】-《程序员的自我修养-链接、封装与库》

版权声明:欢迎交流 https://blog.csdn.net/sishuihuahua/article/details/84556683

序言:

        《程序员的自我修养》这本书,总是似曾相识,难道是周围人经常说的《演员的自我修养》?说来也巧,本来只是想加深对程序运行时各个段代表着什么,为什么要分为.bbs .data之类的段。查阅资料时摘抄自这本书,使用的白话文,通俗易懂,我觉得有必要领会领会。

        怎么说呢,最近看的书都是理论型的,并且各有侧重,各有交汇,比如说测试,在前面的《华为c编程规范》《重构》《程序员的思维锻炼》以及《程序的修炼之道》都有涉及,并且都处于很重的地位。所以我也开始赞同外国外对测试的定义—要想成为一名资深的测试工程师,先是经过开发与管理的过程,才能达到测试的境界。

        《程序员的修炼之道》重点讲解的是各式的变成经验、编程技巧;《程序员的思维锻炼》告诉我们如何高效的开发,如何善用周围的资源与工具提高工作效率。而《程序员的自我修养》是在解释程序运行需要的资源,这些策略如何演变而来,如何实际应用为话题。从三位作者的自述中,就能看出他们有着极其扎实的功底以及刨根问底的精神,从书中的字里行间就能感受到。也正是那句话,现如今那么多编程语言都在更新,但是唯独底层更新少,并且还能保持它的兼容性,这就归功于底层框架基本确定。不管是作为Windows软件开发人员还是嵌入式开发人员,这本书都适用。

        其实这本书可以当做一本手册使用或者字典使用,作者已经将各个知识分开,耦合性不高,但是知识还是覆盖很全面。就好比如我是如何与它结缘一般,某知识网站中的某个帖子摘录了该本书的3.3小节—挖掘SimpleSection.o,就已经解释了可执行文件在运行时各个段的在内存中的分配。所以我觉得这本书最好的笔记就是它的目录,并且我也摘录作者在最开始的一个例子,为这本书的查阅做个铺垫。

《程序员的自我修养》

1. 从这本书中可以学到什么?

本书将详细的描述现在流行的Windows和Linux操作系统下各自的可执行文件、目标文件格式;普通C/C++程序代码如何被编译成目标文件及程序在目标文件中如何存储;目标文件如何被链接器链接在一起,并且形成可执行文件;目标文件在链接时符号处理、重定位和地址分配如何进行;可执行文件如何被装载并且执行;可执行文件与进程的虚拟空间之间如何映射;什么是动态链接,为什么要进行动态链接;Windows和Linux如何进行动态链接及动态链接时的相关问题;什么是堆,什么是栈;函数调用惯例;运行库,Glibc和MSVC CRT的实现分析;系统调用与API;最后还自己实现了一个Mini CRT。

2. 适用什么样的人群?

如何全面的理解一个程序运行的机制?从最简单的Hello World程序说起。

#include<stdio.h>

int main(void)
{
    printf(“Hello World!\n”);
    return 0;
}

根据这个程序,下面的相关问题是否马上就能有很清晰很明确的答案。如何是,那么这本书就不太适合你;如何不是,这本书就可以给与参考。就我的基础而已可以理解80%,但是很是很明确,只是有个大概的印象。

  • 程序为什么要被编译了之后才可以运行?
  • 编译器在把C语言程序转换成可执行的机器码的过程做了什么,怎么做的?
  • 最后编译出来的可执行文件里面是什么?除了机器码还有什么?它们是怎么存放的,怎么组织的?
  • #include《stdio.h》是什么意思?他stdio.h包含进来意味着什么?C语言库又是什么?它是怎么实现的?
  • 不同的编译器(Microsoft VC,GCC)和不同的硬件平台(X86、SPARC、MIPS、ARM),以及不同的操作系统(Windows、Linux、UNIX、Solaris),最终编译出来的结果是一样的吗?为什么?
  • Hello World程序是怎样运行起来的?操作系统是怎么装载它的?它从哪里开始执行,到哪儿结束?main函数之前发生了什么?main函数结束以后又发生了什么?
  • 如果没有操作系统,Hello World可以运行吗?如果要在一台没有操作系统的机器上运行Hello World需要什么?应该怎么实现?
  • printf是怎样实现的?它为什么可以有不定数量的参数?为什么它能够在终端上输出字符串?
  • Hello World程序在运行时,它在内存中是什么样子的?

 

猜你喜欢

转载自blog.csdn.net/sishuihuahua/article/details/84556683