В C отменяет ли использование указателя свойство «register» связанной переменной?
#include<stdio.h>
#include<stdlib.h>
int main()
{
register int clk=0; //maybe register maybe not
int *adr=&clk; //not a register now? i have its address
*adr=1; //if i use this 1000000 times, does it exist in L1 at least?
printf("%d",clk);
return 0;
}
Выдает ошибку компилятора "невозможно взять адрес регистровой переменной", но это не регистр %100. это только шанс.
Это самый медленный цикл?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
int i=0;
p=&i;
for(*p=0;(*p)<100;(*p)++)
{
//do nothing
}
printf("%d ",i);
return 0;
}
Если я сделаю почти все переменные в стиле указателя -и только три переменные только примитивного типа с ключевым словом «register», сделает ли компилятор эти три переменные «действительно зарегистрированными» с большей вероятностью?
ХОРОШО. Проблема решена. Я изучил сборку и выяснил, что это зависит от уровня оптимизации, а также от волатильности переменной. Использование __asm{} гарантирует, что вычисления выполняются в регистре. Спасибо.