Отменяет ли использование указателя свойство «register» ассоциированной переменной?

В 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{} гарантирует, что вычисления выполняются в регистре. Спасибо.

11
задан huseyin tugrul buyukisik 7 August 2012 в 05:56
поделиться