-ffixed-reg
Treat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer or in some other fixed role).
这可以用更简单的方式复制理查德的答案,
int main() {
register int i asm("ebx");
return i + 1;
}
虽然这是没有意义,因为你不知道ebx寄存器是什么。
如果你把这两个,用gcc -ffixed-ebx编译,
#include
register int counter asm("ebx");
void check(int n) {
if (!(n % 2 && n % 3 && n % 5)) counter++;
}
int main() {
int i;
counter = 0;
for (i = 1; i <= 100; i++) check(i);
printf("%d Hamming numbers between 1 and 100\n", counter);
return 0;
}
您可以确保C变量始终使用驻留在寄存器中以实现快速访问,并且不会被其他生成的代码覆盖。 (Handy,ebx是通常的x86调用约定下的被调用者,所以即使它被调用其他函数编译没有-ffixed- *,它应该被恢复)。
另一方面,这肯定是不可移植的,通常也不是一个性能优势,因为你限制了编译器的自由。