"Hello World " —— 深入理解程序从编译到执行

对于C语言编写的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),以及不同的操作系统(Windows、Linux、UNIX、Solaris),终于编译出来的结果一样吗?为什么?
  6. Hello World程序是怎么执行起来的?操作系统是怎么装载它的?他从哪里開始执行?到哪儿结束?main函数之前发生了什么?main函数结束之后又发生了什么?
  7. 假设没有操作系统,Hello World能够执行吗?假设要在一台没有操作系统的机器上执行Hello World须要什么?应该怎么实现?
  8. printf是怎么实现的?他为什么能够有不定数量的參数?为什么它能够在终端上输出字符串?
  9. Hello World程序在执行时。它在内存中是什么样子的?
时间: 2024-08-01 15:26:23

&quot;Hello World &quot; —— 深入理解程序从编译到执行的相关文章

C#程序的编译和执行

1.在讲解 C# 程序的编译与执行之前,首先了解以下两个概念,以便充分理解C# 程序的运行. CLI--Common Language Infrastructure 的简称,C# 程序在Microsoft .NET Framework 上运行时, 它是 Windows 的一个必要组件,包括一个称为公共语言运行库(CLR,在第1章中对该内容有过详细讲解)的虚拟执行系统和一组统一的类库. IL--Intermediate Language 的简称,称为中间语言,又称为 MSIL.所有Microsof

[java基础学习笔记]Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行

本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 主要内容: ---------------------------------------------------| 1.JDK的下载与安装                            | 2.编写第一个java程序HelloWorld     | 3.编译执行HelloWorld                      

Linux环境下c程序的编译和执行

1 单个文件的编译和执行创建main.c文件,内容如下: #include <stdio.h> #include <stdlib.h> int main(void){ printf("Hello world!\n"); return 0; }; 编译: gcc -o main main.o 执行: [email protected]:/ybg/python# ./main Input an integer: 10 sum=55 2 多个文件的编译和执行创建sum

解决QT:forward declaration of &amp;#39;struct Ui::xxx&amp;#39;;invalid use of incomplete struct &amp;quot;Ui::Widget&amp;quot; 等莫名奇异错误

今天在进行QT Widget的UI设计时,改了下Widget的对象名,然后在多次成功编译执行后,执行清理,又一次构建,就出现了好多莫名奇异的错误: widget.h:12: 错误:forward declaration of 'struct Ui::Widget' widget.cpp:8: 错误:invalid use of incomplete type 'struct Ui::Widget' 网上搜索发现是每当你新键一个 QT设计界面, QT会自己主动生成yyy.ui文件,如Widget.

Mac下cocos2dx-3.0打包Android时,提示&amp;quot;SimpleAudioEngine.h&amp;quot;not found的解决方法

前段时间触控公布cocos2dx-3.0,在升级之后试过之后,在最初的不习惯之后,感觉比之前的好用了不少,在下之前一直是用xCode模板创建,这回算是一口气升到顶了. 之后再一次编程时须要用到SimapleAudioEngine,而之后调试的时候在iPhone上全然没问题,可是在Android真机上调试时,却提示"SimpleAudioEngine.h" not found,在网上查了下,应该是库没有导入,可是因为我对eclipse了解不多,并且import入的时候也有莫名其妙的错误,

百度开放云首席架构师徐串:架构师必须理解程序员的痛

在2016中国云计算技术大会(CCTC 2016,专题报道)上,百度开放云首席架构师徐串发表了题为<企业IT基础架构在云端如何变革>的主题演讲,并接受CSDN记者专访,深入分享了他对架构及设计的认识,对架构师工作和技能的理解,以及百度开放云架构满足大数据和人工智能等不同应用需求的实践经验. 徐串表示,云计算环境下的架构,除了高吞吐.可扩展性.稳定性的需求,灵活性的实现也很重要.架构师的工作就是在各种矛盾之间坚持或妥协,如高吞吐和低延迟的矛盾,优雅架构和紧迫需求的矛盾.保证业务的需求,是设计架构

由[交换两个变量的值问题]理解程序的时空复杂度

由一个编程经典问题,交换两个变量的值入手,理解程序的时空复杂度(以下均使用PHP代码演示问题的解决方法)解决问题的方法一:    1.方法文字描述:使用一个中间变量temp,实现两个变量值的互换    2.实现的具体代码: <?php  //声明两个变量$a,$b  $a = $_GET['a'];   $b = $_GET['b'];  //打印没有互换前,$a和$b var_dump("未替换前:a={$a} and b={$b}"); //使用中间变量$temp实现$a和$

IT行业的工资是否虚高?你理解程序员高工资所在吗?

今天看到一个问题:想要找人做个类似微信的东西一报价就是10W+,为什么这么贵?有些人觉得程序员大部分都是不入流的,东西也就抄抄就算,却拿着这么高的工资,那么IT行业的工资是否虚高?你理解程序员高工资所在吗? 看看一些程序员的回答怎么说: 绝大多数是抄的?仅限于复制黏贴? 程序的可移植性是一段程序的重要价值体现!最开始的时候老师就说过你的程序如果只能自己用别人看了不能移植,那你这段程序就没有意义.前人种树后人乘凉的道理.但是总会有新的功能实现的,如果都是复制黏贴还要我们干啥呢? 写代码的难度亚于市

VS2013带来的&amp;quot;新特性&amp;quot;

VS2013除了引入"Bootstrap"库以外,最大的变化就是.net Framework 4.5下面的都不支持了.也就是说,假设不把.net库升级成.net Framework4.5, 那么MVC, WebApi等等都用不了. 1.把开源的东西简单包装下.Bootstrap是免费的. 2.把基础框架版本升级,曾经的基础平台执行不了,Win7的.net framework3.5,out了,用Windows8.1吧,Windows server2008用不了了. Bootstrap库: