程序的执行过程

一下是一个小总结:

我们双击打开一程序,其实并不是那么简单就直接执行程序的main(Winmain)函数的,双击打开相当于我们在cmd中使用命令打开该程序一样,是通过系统外壳Shell打开的,shell接收到程序启动的请求,然后为程序做一些准备(包括分配内存、创建进程、主线程、等),系统调用CreateProcess函数创建一个进程内核对象(管理该进程的数据结构),然后分配内存即为该进程分配虚拟地址空间,然后调用加载器把该进程的数据和代码加载进来(包括改程序所依赖的动态链接库),然后系统为该进程创建主线程,主线程调用运行期代码(runtime代码)开始执行,运行期代码便开始调用初始化全局和静态变量以及调用全局对象的构造函数最后才调用main函数开始执行执行程序代码以及使用程序数据!

以下是运行期代码的主要工作:(引用Windows核心编程)

 检索指向新进程的完整命令行的指针。
• 检索指向新进程的环境变量的指针。
• 对C/C++运行期的全局变量进行初始化。如果包含了StdLib.h文件,代码就能访问这些变量。

• 对C运行期内存单元分配函数(malloc和calloc)和其他低层输入/输出例程使用的内存栈进行初始化。
• 为所有全局和静态C + +类对象调用构造函数。

• 调用对应的WinMain函数

• C/C++启动函数就调用应用程序的进入点函数

• 进入点函数返回时,启动函数便调用C运行期的e x i t函数,将返回值(nMainRetVal)传递给它;

温馨提示:以上是个人的一些理解,其中有问题希望大家能够指出来。

你可能感兴趣的:(程序的执行过程)