这是否可以告诉编译器将某个全局变量放入寄存器?从而有效地阻止该寄存器在其他地方使用。我知道这可能很难,因为即使只是简单地调用malloc()
也需要暂时将其泄漏。
我正在考虑它,因为我正在寻找一种方法来有效地为各种VM实现二级堆栈,自然将二级堆栈指针存储在另一个寄存器中会很棒。
从理论上讲,这是可能的:您可以使用调用约定所需的任何寄存器来跨函数调用保留,并将其用于全局变量。
但是,这有一些问题:
正确地做,将堆栈指针保持为VM模拟器中的本地变量可能会为您提供最佳性能。
这是否可以告诉编译器将某个全局变量放入寄存器?
并不是的。有register
存储类,但这只意味着变量应该“尽可能快”。这个关键字现在大多已经过时,它是从编译器是垃圾的时候开始的。
从而有效地阻止该寄存器在其他地方使用
无法选择特定的寄存器。您必须使用内联汇编程序。
我正在考虑它,因为我正在寻找一种方法来有效地为各种VM实现二级堆栈,自然将二级堆栈指针存储在另一个寄存器中会很棒。
听起来你需要整体编写汇编程序。甚至不可能从C设置堆栈指针。或者如果通过“堆栈”你并不是指程序存储器,而是一些数据类型,那么首先不要使用预先成熟的优化。