zoukankan      html  css  js  c++  java
  • "Hello World " —— 深入理解程序从编译到执行

    对于C语言编写的Hello World程序(例如以下)。对于程序猿来说肯定如雷贯耳,就是这样一个简单的程序,你真的了解她吗?

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

    对于以下这些问题,你脑子里可以立即反映出一个清晰、明显的答案吗?

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

  • 相关阅读:
    【http】使用浏览器Cache和http状态码304实现的客户端缓存
    delegate与模式
    用Delegate绕开频繁反射的又一个简单高效的方法
    直接调用、委托与反射调用的性能区别
    Lambda表达式的非Linq用法
    泛型+反射+特性=以静制动
    绕开频繁反射
    不要用错单例模式
    活用接口——反例:MultiKeyDictionary
    jQuery框架总体分析
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6941136.html
Copyright © 2011-2022 走看看