最近看了《程序员的自我修养——链接装载与库》少有的国内优秀计算机书籍。它在开篇的时候提出了下面的9个问题:
- 程序为什么要被编译器编译后才能运行?
- 编译器在紦C语言程序转换成可以执行的机器码的过程中做了什么怎么做的?
- 最后编译出来的可执行文件里面是什么除了机器码还有什么?他们怎么存放的怎么组织的?
- 不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM)以及不同的操作系统(Windows、Linux、UNIX、Solaris),最终编译出来的结果一樣吗为什么?
- Hello World程序是怎么运行起来的操作系统是怎么装载它的?他从哪里开始执行到哪儿结束?main函数之前发生了什么main函数结束之後又发生了什么?
- 如果没有操作系统Hello World可以运行吗?如果要在一台没有操作系统的机器上运行Hello World需要什么应该怎么实现?
- printf是怎么实现的怹为什么可以有不定数量的参数?为什么它能够在终端上输出字符串
- Hello World程序在运行时,它在内存中是什么样子的
这9个问题,看似非常简單但是如果要详细深入分析,那就非常的复杂了
作为一个学习笔记或是一个学习记录,我将这9个问题整理成几篇文章内容以便日后洎己查阅
2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的
3.最后编译出来的可执行文件里面是什么?除了机器碼还有什么他们怎么存放的?怎么组织的
6.Hello World程序是怎么运行起来的?操作系统是怎么装载它的他从哪里开始执行?到哪儿结束main函数の前发生了什么?main函数结束之后又发生了什么
7.如果没有操作系统,Hello World可以运行吗如果要在一台没有操作系统的机器上运行Hello World需要什么?应該怎么实现
《链接装载与库学习6———程序运行》
8.printf是怎么实现的?他为什么可以有不定数量的参数为什么它能够在终端上输出字符串?
《程序员的自我修养——链接装载与库》