根据《汇编语言循序渐进》(第3版)中的《Storage for Short Term》第8章:
堆栈应该被视为短期存放东西的地方。存储在堆栈中的项目没有名称,通常必须按照放入的相反顺序从堆栈中取出。后进先出,记住。后进先出!
然而,据我所知,C 编译器基本上所有事情都使用堆栈。这是否意味着堆栈是存储短期和长期变量的最佳方式?或者,还有更好的方法?
我能想到的替代方案是:
- 堆,但这很慢。
- 静态变量,但这将持续程序的整个生命周期,这可能会浪费大量内存。
堆栈通常用于将参数推送到函数调用,存储函数的局部变量,并且还跟踪返回地址(从当前函数返回后将开始执行的指令)。但是,函数调用的实现方式取决于编译器的实现和调用约定 https://en.wikipedia.org/wiki/Calling_convention.
C 编译器基本上使用堆栈来处理所有事情
那不是真的。 C编译器不会将全局变量和静态变量放入堆栈中。
这是否意味着堆栈是存储短期和长期变量的最佳方式?
堆栈应该用于当前函数返回后不再使用的变量。是的,您也可以长期使用堆栈。局部变量在main()
将持续整个程序的生命周期。另请记住,每个程序的堆栈都是有限的。
堆,但这很慢。
那是因为它需要在运行时进行一些管理。如果您想在汇编中分配堆,您将必须自己管理堆。在 C、C++ 等高级语言中,语言运行时和操作系统管理堆。你不会在装配中看到它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)