从函数c返回值的幕后
在c中从函数返回值的幕后是什么?
在我的理解中每当func.被称为返回地址和堆栈帧(具有局部变量,func.参数和寄存器的被调用顺序)被推送到调用堆栈. 但是当执行遇到返回statemenet时会发生什么?例如 int a( int b ){ int c = b * 2; return c; } 遇到return语句后,存储在EAX寄存器中的C值是否被破坏,局部变量被破坏,堆栈帧从调用堆栈中删除,之后EAX寄存器中的值被移入“返回地址”内存? 或者我误解了这个概念? 所有帮助都非常感谢.谢谢. 解决方法
顺便说一句,汇编语言是依赖于处理器的. ARM处理器没有EAX寄存器.
编译器可能具有传递参数和返回参数的标准.从函数返回值的方法取决于实现(编译器).所有编译器都没有标准. 未经优化的代码 如果返回值适合单个寄存器,则将使用寄存器返回该值.取决于处理器. 对于较大的对象/值,编译器有两个选项:在多个寄存器中返回对象或返回指向该值的指针.指针可以像堆栈中的索引一样简单,也可以是值所在的地址. 优化代码 编译器可以将函数计算为常量并将常量放入可执行代码中;因此不需要函数调用或函数返回. 编译器可能决定内联您的函数.在这种情况下,没有返回值,类似于赋值语句.临时变量可用于包含值或另一个寄存器. 更多的信息有关更多详细信息,请研究“编译器理论”.有一本好书,上面有龙…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 从内存卡读取xml文件到内存,写入xml到sd卡
- Oracle 12c(12.1.0.5) oem agent silent install(静默安装a
- 运行地址和加载地址
- reactjs – React.如果演示组件包含容器组件,这是不是很糟糕
- postgresql 问题
- objective-c – 在Xcode中使用Mapkit时获取错误?
- 在C#和Windows中的事务文件写入?
- ajax 登录session失效登录页面跳转 ajax扩展来做
- c# – 无法将类型’int’隐式转换为’System.Collections.G
- React Native入门(九)之导航组件React Navigation(1)St