![]() |
1
4
从你的评论到其他答案,这听起来像是一个10000英尺的视角可能有助于理解。 启动应用程序的具体步骤在操作系统、编译器和编程语言之间有所不同,但“常规”过程基本上是相同的。
|
![]() |
2
12
全局变量是在
对OP评论的回答:
如果你想比你写的代码更深入地挖掘,以前会发生一些事情
因此,简而言之,
|
![]() |
3
3
你宣布
撇开静态初始化不谈,正确的做法是说执行从
|
![]() |
4
0
自从
|
![]() |
5
0
应用程序不是从MAIN启动的。以下是使用VS2005编译的主(对于控制台应用程序,Unicode版本)开始时的一些堆栈快照:
可以说在用户模式下的新进程上下文中运行的第一个函数是baseprocessstart,它是一个Win32级别的函数。它调用CRT级别的mainCRTStartup,它使用二进制映像本身中的各种数据节来运行各种初始值设定项-例如,全局构造函数(如obj)。实际上,您可以在ctor中设置断点并自己观察它:
(在格式化方面有一些困难)。 中期 循环访问全局对象并调用其构造函数的函数。 在不同的平台和编译器上(甚至在vs上,对于一个mfc应用程序来说,这两个堆栈看起来是不同的),但其思想始终是相同的:运行时使用二进制图像信息来初始化全局对象 之前 您自己的主管道已进入。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |