C语言参数本质

C语言参数本质

通过了解参数传递的本质了解编译器 vc++6.0
C语言代码:
C语言参数本质
我们来看一下反汇编窗口:按F10
C语言参数本质
通过这个反汇编代码我们看到,在vc++6.0中虽然我们传递参数时定义的是char类型,但是在主函数中它传递参数的方式依然是按照32位的方式传递。。。

#我们传递参数时定义char类型和short类型是无意义的,它传递参数都是按照4字节传递的,如果是64位的他就按照8字节传递的#

总结:参数传递的本质,将上层函数的变量,或者表达式的值“复制一份”,传递给下层函数。

看完了参数传递的本质,那我们来了解下创建一个空函数,什么都不干,他是如何开辟多大的内存缓冲区,在之前的学习中我们了解到,即使我们什么都不做,开辟函数时,他也会自动提升堆栈,提升缓冲区。
C语言:
C语言参数本质
汇编代码:
C语言参数本质
什么也不做它会给开辟一个16进制40的空间

如果我们在函数中加一条int指令
C语言:
C语言参数本质
汇编:
C语言参数本质
这是它给分的缓冲区时十六进制的44(编译器的不同开辟的缓存空间就不同)在vc编译器中哪怕我们在函数中定义的时char和short它也会按照4字节开辟缓冲区间

总结:
1.小于32位的局部变量,空间在分配时,按32位分配。
2.使用时按实际的宽度使用
3.不要定义char/short类型的局部变量
4.参数与局部变量没有本质区别,都是局部变量,都在栈中
5.完全可以把参数当初局部变量使用