是否可以用某种方式包装一组c ++语句来告诉编译器不使用某些寄存器?
答案 0 :(得分:1)
当然不是以便携式方式。 C ++语义级别对此注册事物一无所知(尽管有register
个关键字)。
g++
例如can allocate a register globally或locally变量,在这种情况下,编译器永远不会触及该寄存器。这有时可能很有用(我已经在VM中使用了这种方法,以获得Lisp实现的严重性能,而无需手动编写程序集中的所有内容)。
我当然怀疑除非您重新编译所有标准库,否则更改标准头文件以包含库中代码可以触及寄存器的声明(并且根据ABI,您可能需要的寄存器)使用声明"刮擦"因此不保存和恢复。
也许其他编译器也有这个选项(clang
但是例如尽管几乎与g ++兼容,不支持寄存器分配)。
答案 1 :(得分:0)
不,C ++下面有一个相当简单的模型。
如果你考虑一下C ++编译器如何知道要编译的寄存器?
如果不钻研汇编程序,你将无法做到这一点。
因为你想要阻止使用某些寄存器,所以你需要从你想要禁止那些寄存器的点开始编写代码,以便不再需要这些寄存器 - 这可能是很多代码。
如果没有更多详细信息,说明为什么要阻止访问某些寄存器以及预防的时间长短,那么我所能给出的只是模糊的一般性。