全局变量先于main/winmain执行

本文通过一个简单的C++示例介绍了全局对象的构造时机,即全局对象会在main函数执行之前完成构造。此特性有助于理解程序启动初期的初始化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 C++规定,全局对象的构建比程序的进入点(main/winmain)更早。

  1. class A
  2. {
  3. public:
  4.     A()
  5.     {
  6.         cout<<"A"<<endl;
  7.     }
  8. };
  9. A a;
  10. int main(array<System::String ^> ^args)
  11. {
  12.     cout<<"main"<<endl;
  13.     getchar();
  14.     return 0;
  15. }

结果为: A  main

参考资源链接:[揭秘exe运行全过程:从启动到退出的Windows奥秘](https://wenku.youkuaiyun.com/doc/6e87gmtua9?utm_source=wenku_answer2doc_content) 在Windows操作系统中,双击exe文件图标开始,程序的启动和执行过程涉及多个阶段和复杂机制。《揭秘exe运行全过程:从启动到退出的Windows奥秘》一文详细探讨了这一过程,以下根据文章内容为你解答。 首先,双击操作相当于向系统发送了一个启动程序的命令。操作系统中的Shell(通常是Explorer.exe进程)负责检测这一动作,并开始启动新程序的进程。在Windows中,启动进程前会查找注册表中该exe文件关联的操作信息,例如默认的程序打开方式等。 接下来,系统会创建一个新的进程,并将其初始化。进程的初始化涉及到内存管理,包括为程序的可执行文件(PE文件格式)分配内存空间,并加载必要的动态链接库(DLLs)。操作系统的加载器(Loader)会读取PE文件头,找到程序的入口点地址,并将其映射到内存中,为执行程序做好准备。 一旦进程创建并初始化完成,控制权会转移到程序的入口点,即mainWinMain函数。这是程序的主函数,它代表程序的核心逻辑的开始。在这里,程序开始执行编译后的代码,可能涉及到资源管理、用户交互和数据处理等任务。程序的初始化代码负责创建线程和设置必要的环境,如TLS(线程局部存储)等。 在这个过程中,操作系统还会负责创建主线程,这是程序开始运行时唯一必须的线程。在主线程中,最终会调用mainWinMain函数,开始执行程序的业务逻辑。此外,如果程序是图形用户界面(GUI)程序,还会涉及创建窗口并显示,这通常通过调用CreateWindow和ShowWindow等函数来完成。 最后,当程序的mainWinMain函数执行完毕,或者遇到程序员设定的退出条件时,程序将开始清理阶段。在此阶段,程序将关闭所有打开的文件和窗口,释放资源,终止所有线程,并最终结束进程。操作系统的内存管理系统会回收程序使用的内存,确保系统的稳定性和资源的有效利用。 为了全面了解上述过程,推荐阅读《揭秘exe运行全过程:从启动到退出的Windows奥秘》,它以通俗易懂的方式详细讲解了Windows下exe文件的生命周期。了解这些信息对于Windows平台的软件开发人员尤为重要,可以帮助他们更好地控制程序的启动、运行和退出过程,优化程序性能和稳定性。 参考资源链接:[揭秘exe运行全过程:从启动到退出的Windows奥秘](https://wenku.youkuaiyun.com/doc/6e87gmtua9?utm_source=wenku_answer2doc_content)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值