Hello World 程序背后发生了啥

#include <stdio.h>
int main()
{
    printf("Hello World\n");
    return 0;
}

1.程序为啥要被编译器编译之后才可以运行

2.编译器在把C语言程序转换成可以执行的机器码过程中做了什么,怎么做的

3.最后编译出来的可执行文件里面是什么?除了机器码还有什么?它们怎么存放的,怎么组织的

4.#include<stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的?

5.不同的编译器(Microsoft VC,GCC)和不同的硬件平台(x86,SPARC,MIPS,ARM),以及不同的操作系统(Window,Linux,UNIX,Solars),最终编译出来的结果是一样的么?为什么

6.Hello World 程序是怎么运行起来的?操作系统是怎么装载它的,它从哪儿开始执行,到哪儿结束,main函数之前发生了什么?main函数结束之后又发生了什么?

7.如果没有操作系统,Hello World可以运行么,如果要在一台没有操作系统的机器上执行Hello World 需要什么?应该怎么实现

8.printf是怎么实现的,它为什么可以有不定数量的参数,为什么它能够在终端上输出字符串

9.Hello World 程序运行时,它在内存中是什么样子的

我看到这些问题,一看蒙蔽。好好补补吧

要实现Hello World程序:

至少满足以下几个计算机最关键的条件:三个部件:CPU,内存,I/O控制芯片

早期计算机

download.png

总线

随着CPU的频率上升,同时图形化操作系统的普及,图形芯片需要与CPU,内存之间交换大量的信息,从而导致成各个硬件之间交互的频率不一致,从而产生了南桥,北桥芯片,南桥连接低速的设备,北桥连接高速的设备

download.jpg

SMP与多核

随着CPU的频率到顶,因此为了提升处理器的处理速度,增加CPU的数量,故多核心处理器