【发布时间】:2012-06-23 00:07:33
【问题描述】:
我的问题非常类似于:GCC: Prohibit use of some registers
但是,我想限制 C 函数中使用的寄存器数量。换句话说,我希望能够像使用clobber 寄存器一样使用指令,但应用在C 函数级别而不是内联汇编中。此外,每个函数可能有一组不同的寄存器可供使用,因此它不可能是一刀切的解决方案。
我想到的唯一两种可能的解决方案是:
- 在汇编程序中执行所有操作。不能真正解决我的问题...
- 使用某种指令分别编译每个函数,以便在 GCC 中条件使用寄存器。如果单独编译每个函数,我会失去很多潜在的优化,这会使代码几乎不可读。
既然我试图在 C 中完成所有这些工作,那么预编译器有什么办法可以在这里提供帮助吗?是否有任何可能的方法来实现我的预期目标?
【问题讨论】:
-
请问您为什么要这样做?
-
如果你试图禁止特定的寄存器,那么你就不再是真正的 C 级别了。
-
您最好不要担心它并让编译器按照它认为最好的方式使用寄存器。如果你仍然担心它,那么你是在处理汇编语言编程,而不是真正的 C 编程。
-
即使是 register 关键字也只是一个建议。编译器无论如何都会尝试将变量保存在寄存器中,register 关键字指示它在有机会的情况下优先选择一个特定变量而不是其他变量。
标签: c gcc compiler-construction cpu-registers