В 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", компилятор делает эти три переменные "действительно зарегистрированными" с более высокой вероятностью?
OK. Задача решена. Я узнал некоторые сборки и выяснил, что это зависит от уровня оптимизации, а также от изменчивости волатильности. Использование __asm {} гарантирует, что оно вычисляется в регистре. Спасибо.