gpt4 book ai didi

c - 寄存器中的全局变量

转载 作者:行者123 更新时间:2023-12-03 17:20:37 25 4
gpt4 key购买 nike

是否可以告诉编译器将某个全局变量放入寄存器中?因此有效地阻止了该寄存器在其他地方的使用。我知道这可能很困难,因为即使对malloc()的简单调用也需要暂时将其溢出。

我正在考虑它,因为我正在寻找一种有效地为某种VM实现辅助堆栈的方法,自然地,将辅助堆栈指针存储在另一个寄存器中将是很棒的。

最佳答案

从理论上讲,这是可能的:您可以获取所有需要在函数调用之间保留的调用约定的寄存器,并将其用于全局变量。

但是,这存在一些问题:


结果是,您的函数将为可用的局部变量减少一个寄存器。这意味着平均更多的内存访问。
库函数不会保留寄存器的值,它们会像其他任何非智能寄存器一样将其保存在堆栈中,请按需使用,并在返回之前将其还原。
因此,不可能将回调指针传递给库函数,并且无法从回调访问全局寄存器。 (但这可能不是您的问题。)
如果将VM堆栈实现为全局变量,则首先要做的是非常错误的事情。堆栈本质上应该是线程局部的,没有全局性的业务。


做正确的事,将堆栈指针保持为VM仿真器内的局部变量可能会为您提供最佳性能。

关于c - 寄存器中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49795884/

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