2016 - 2024

感恩一路有你

c语言堆栈基本代码 既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?

浏览量:2909 时间:2021-03-12 05:11:14 作者:admin

既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?

看了下面兄弟的回信,我们只能说他们一半是对的。

真正的原因是abi(应用程序二进制接口)。

ABI定义了与系统交互的细节,如数据类型、大小和对齐方式;调用约定(控制函数的参数传递方向、可变长度处理、堆栈清理体以及如何接受返回值等);系统调用的编码以及应用程序如何对操作系统进行系统调用系统;以及采用完整ABI操作系统基本格式、程序库等的第二代对象文件。完整的ABI,如英特尔二进制兼容标准(IBCs),允许支持它的操作系统上的程序在支持此ABI的其他操作系统上运行,而无需修改。

其他ABI标准化细节包括C名称修改和同一平台上编译器之间的调用约定,但不包括跨平台兼容性。

至于下面兄弟提到的eax save返回值,这只是X86的ABI规范。在其他CPU架构平台(如PowerPC)中,实现是不同的!--PowerPC,返回值存储在R3寄存器中

在函数内部调用输出时可以直接用来打印出调用顺序。1、 C/C编译的程序所占用的内存分为以下几个部分:1。堆栈由编译器自动分配和释放,存储函数参数和局部变量的值。其操作类似于数据结构中的堆栈。2堆通常由程序员分配和释放。如果程序员没有释放堆,那么在程序结束时,操作系统可能会恢复堆。注意,它在数据结构上与heap不同。分配方法类似链表,哈哈。三。全局区域(静态)-将全局变量和静态变量的存储放在一起。初始化的全局变量和静态变量在一个区域中,未初始化的全局变量和未初始化的静态变量在另一个相邻区域中。-程序结束后,系统将发布4。文本常量区域-常量字符串放在这里。程序完成后,系统发布5。程序代码区-函数体的二进制代码。2、 例行程序:

c语言堆栈基本代码 c语言实现堆栈 int函数c语言

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。