【汇编和c语言】空函数和裸函数和调用约定

探讨C语言中空函数的实际作用及内存占用情况,介绍如何使用裸函数避免自动内存分配,以及如何手动平衡堆栈确保程序稳定运行。

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

                                                                     c语言里面有个东西叫函数

                                                                                    辣么~

                                                             你们看下以下这个函数,它干了什么?

                                                                    

                                                           嗯~看起来是一个空函数,什么都没干!

                         对于c语言来说,因为函数里面什么程序都没有,所以什么都没有执行,所以称之为空函数

                                                                                   !然 而!

                                                                  它真的什么都没干吗?未必。

                                            程序是什么都没干,但是编译器却干了很多事情!!!

                                                                 我们来看下这个空函数的反汇编

                                                             

                     可以看到,即使我们只是写了一个空函数,但是编译器还是为我们在暗地里做了很多手脚

                                                                           做了什么事情?

                                                                          开辟内存空间!!!

        由此可知:每个程序运行都是需要占用内存的,就算程序没有用到,编译器也会自动开辟一块地方给函数,当程序执行完成之后再释放内存,留给下一个程序继续使用。

————————————————————————————————————————

                                                                                     辣么

                                       如果我们不想让编译器自动为我们开辟空间,那要怎么办呢? 

                                                     ↓↓↓↓↓↓↓↓在这里有一个东西可以使用↓↓↓↓↓↓↓↓

                                                                                    裸函数

                                                                

                                          如图上所示,按照以上规定的格式书写函数,函数将变成一个裸函数

                                           意思是告诉编译器,这个函数不进行任何操作,不能添加任何代码!!

                                                            ↓↓↓↓↓↓↓所以我们看到的反汇编是这个样子的↓↓↓↓↓↓↓

                                                                       

                                                                  真正意义上的空函数,比空函数还空的函数

                                                                                  但是这样可以运行起来吗?

         

                                               可以看到,即使编译器没有报错,但是程序却直接崩溃

                                                                                         为什么?

                                                         为什么?

                                                为什么? 

                                   因为裸函数里面什么都没有,所以里面的堆栈无法平衡,所以程序奔溃了

                                                                                  那要怎么办呢?

                        因为裸函数里面什么都没有,所以之前编译器为我们做的东西,现在我们要自己动手做

                                                                                       怎么做?

                                                                         ↓↓↓↓↓↓↓按照以下的格式↓↓↓↓↓↓↓

                                                               

               在__asm这个函数里面自行添加汇编的指令,使得堆栈平衡,就可以通过啦~

                                                                         如此,编译成功!

                             最后!附上一个调用约定,具体怎么使用得可以看着说明自己操作一下下~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师兄师兄怎么办

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值