C++程序的生前死后(CRT Startup code)

一、读前带入的问题

1.C++进入点是main()吗?

2.什么代码比main()更早被执行?

3.什么代码在main()结束后才被执行?

4.为什么上述代码可以如此行为?

5.Heap的结构如何?

6.I/O的结构如何?

二、参考书籍

《程序员的自我修养——链接、装载与库》

三、什么是CRT Startup code

CRT Startup code:C Runtime Startup code。启动码函数。

任何C/C++程序在main函数之前有个启动码函数,main函数是在启动码函数里面调用,启动码函数是最早执行的函数

1.Startup code的位置(以window环境下vc6为例)

在window环境下的VC6中的CRT Startup code函数名为mainCRTStartup()。位于crt0.c文件中

call stack(调用栈)

image-20231229161058533

KERNEL32! bff89f5b()…内核函数

mainCRTStartup() 启动码函数

四、Startup Code执行流程

image-20231229155015427

1)内存初始化

2)IO初始化

3)4)5)6)字符串处理

7)c data 初始化

8)main

9)exit:C++程序执行完后的后处理


http://cxspace.org.cn/2024/01/05/C++程序的生前死后(CRT Startup code)/
Author
陈晓
Posted on
January 5, 2024
Licensed under