gpt4 book ai didi

c - 汇编中的堆栈与 c 中的堆栈?

转载 作者:太空狗 更新时间:2023-10-29 16:48:26 24 4
gpt4 key购买 nike

我一直在想,对于 RISC 或 ARM 等处理器,C 中的堆栈和汇编程序中的堆栈有什么区别?

教授说,要小心,stack 不同于你在其他学科(算法和结构,我们学习 C 的地方)学到的 stack

据我所知,两者都只是保存在内存中的数据,都是LastInFirstOut方案的功能,都需要在使用后清理。

我的意思是,它们不可能相同,因为它们处于两个不同的“世界”,但我是否遗漏了一些重要的不同之处?也许就是这样,但从那以后它一直困扰着我。

谢谢

最佳答案

堆栈完全相同。一个人可以编写一个混合汇编/C 的程序,并且它们使用相同的堆栈。

C 编译器使用一些关于如何使用堆栈的约定:在每个函数入口处填充一个格式良好的堆栈帧;并在功能离开时清理。有专门用于更改堆栈管理的编译器指令。例如:gcc stack checking

网络上的一些引用:google : c stack frame

在 Assembly 中,堆栈必须完全由程序员管理。制定关于如何管理堆栈的规则(例如模仿 C 规则)是一个很好的做法

堆栈管理指令也非常依赖于处理器(x86 上的 pushpop 指令,或 stmia/ldmfd 在 ARM 上。类似地,一些处理器有专门的堆栈指针寄存器(esp 在 x86 上),对于其他一些它只是常规的(r13 在 ARM7 上。)

学习堆栈管理的一个好方法是使用调试器并进行一些回溯以查看帧内容。

为了更好地理解汇编级别的 x86 堆栈,我推荐 this Wikipedia articlethis one for stack frames

关于c - 汇编中的堆栈与 c 中的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com