说说安腾处理器的双栈设计

编程入门 行业动态 更新时间:2024-10-18 06:06:30

说说安腾<a href=https://www.elefans.com/category/jswz/34/1768090.html style=处理器的双栈设计"/>

说说安腾处理器的双栈设计

去年的时候,我曾提到,在安腾(Itanium)处理器上有两个栈。
传统上的”栈”(包括SP寄存器所指的那个栈)是一个手动管理的内存块,函数可以从中分配空间以在执行期间使用。
举个例子,如果你声明一个局部变量:
TCHAR szBuffer[MAX_PATH];

那么,这个缓冲区将会在上面所说的栈中分配内存。
但是,不是所有的局部变量都分配在这个栈中。

回想一下,安腾处理器上有大量的寄存器,其中大部分都参与函数调用。 因此,许多局部变量被放置在寄存器中而不是栈中,当调用函数时,这些寄存器被处理器所占用,而在函数返回时释放。 他们在哪里得到这些内存空间? 处理器通常可以将它们存储到其他未使用的寄存器中,这项技术比较复杂晦涩,我暂时不细说 (那些仍然感兴趣的人,可以阅读英特尔关于该主题的文档。)如果处理器用完了这些寄存器,它就会转为使用主存储器,进入一个称为“寄存器后备存储”的地方。 这是另一个与传统栈类似栈内存块。

如前所述,这种双栈设计模型的一个结果是,栈溢出不会破坏函数返回地址,因为返回地址没有保存在传统栈上,相反,它保存在寄存器中或(在寄存器不够的情况下)在寄存器后备存储中。

双栈设计另一个结果是,各种定位堆栈开始的技巧只会找到其中一个堆栈。 如果你认为对该栈进行前后偏移,能找到所有可访问的对象引用,那么错过另一个栈将导致问题。

安腾架构挑战了许多假设,并且对各种技术上非法但没有人会真正执行的恶作剧更加不会宽容,其中一些我在之前的文章中已经讨论过。
今天可以在这个列表中加上新的主题了,我将其命名为:”第二个栈”。

总结

安腾:不好意思,我设计过于先进导致提前结束了生命周期。
F22:我也一样哈。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The Itanium’s so-called stack》

更多推荐

说说安腾处理器的双栈设计

本文发布于:2024-02-12 04:50:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686118.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:处理器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!