main()函数执行前,做了什么?

本文解析了C/C++程序在main函数执行前的准备工作,重点介绍了_start()和_libc_start_main()函数的作用,包括设置运行环境、启动线程、初始化操作及注册清理函数,对初学者理解程序启动过程有极大帮助。

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

最近阅读了一本书《高级C/C++编程技术》,发现都是非常有用的知识,对于初学者提升能力是非常有帮助的,更容易理解编译过程,这儿讲解一下main函数执行之前做了哪些准备。

main()函数之前,会先执行一些函数,这些函数有什么作用呢?

既然在main()函数之前执行,那肯定是对程序的运行做准备。这个应该都能想到。

这儿用两个函数作简单讲解:

①_start()函数:主要目的是为接下来调用的_libc_start_main()函数准备入参。

②_libc_start_main()函数:

原型:

 int __libc_start_main(int (*main) (int, char * *, char * *), /* address of main function */
                                       int argc, /* number of command line args */
                                       char * * ubp_av, /* command line arg array */
                                       void (*init) (void), /* address of init function */
                                       void (*fini) (void), /* address of fini function */
                                       void (*rtld_fini) (void), /* address of dynamic linker fini function */
                                       void (* stack_end) /* end of the stack address */
);

从①知道_start()函数是准备参数,然后在调用此函数,那么_libc_start_main()函数会做哪些动作呢?

a.为程序设置好运行环境;

b.启动程序的线程;

c.调用_init()函数,做一些必要的初始化操作,gcc编译器利用_attribute_(constructor)关键字对程序启动前的自定义操作提供支持;

d,注册_fini() 和 rtld_fini()函数,程序终止时调用。

 

执行_libc_start_main()函数完成后,就开始调用main(),启动程序。

希望能对一些初学者有所帮助。加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值