您的位置:首页 > 其它

程序运行流程——准备篇

2010-11-19 22:33 239 查看
 已经忘了第一次写c语言程序到底是什么时候的事了。不过我却明白,当时我肯定是知其然而不知所以然。不知从什么时候开始对程序执行背后的东西感兴趣了,而且愈演愈烈,现在终于下定决心去搞明白它了。

就以c语言中最经典的例子来说明吧:

# 1 "hello.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hello.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
...

typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;

typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

__extension__ typedef long long int __quad_t;
__extension__ typedef unsigned long long int __u_quad_t;
# 131 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 132 "/usr/include/bits/types.h" 2 3 4

...

__attribute__ ((__nothrow__));
# 912 "/usr/include/stdio.h" 3 4

# 2 "hello.c" 2

int main(void)
{
printf("Hello, world!/n");

return 0;
}

编译:    编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成的汇编代码文件。

汇编:    将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。
链接:    将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件

硬件组成:
从下图中看出一个典型的系统由总线、Cpu、I/O设备、主存等构成。



在这里我们只是先睹为快,后面真正执行时会大量设计cpu与主存、磁盘的交互。。。

程序的运行:

程序的链接、装载及运行非常复杂,下一篇将丝丝入扣地剖析它。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息