Какую переменную следует оптимизировать в следующем коде C - PullRequest
0 голосов
/ 16 марта 2011

Если ваш компилятор на самом деле оптимизирует время доступа только двух переменных регистров для каждой функции, какие две переменные в следующей программе являются лучшими для преобразования в переменные регистра?есть ли ...

Ответы [ 5 ]

5 голосов
/ 16 марта 2011

Вопрос с подвохом?В умном компиляторе ни одна из переменных не зарегистрирована.i имеет свой адрес, поэтому он не может быть в реестре все время.j, k и m должны быть оптимизированы.

4 голосов
/ 16 марта 2011

Конечно, нет j, так как он никогда не используется. Также не i, так как вы используете оператор address-of для записи в него, что означает, что его нужно прочитать обратно из памяти после того, как оно было записано scanf. Это оставляет только k и m.

3 голосов
/ 16 марта 2011

Хороший компилятор оптимизирует эту часть кода:

m=0;
for(k=0;k<100;k++)
  m=k+m;

И заменит ее на m = 4950; :) Лучший из них оптимизирует m = 4950; и ничего не установит).J также будет оптимизирован.И i не может быть зарегистрирован, потому что в scanf нужен его адрес.Итак, окончательный ответ - «НЕТ ОДНОГО».

2 голосов
/ 16 марта 2011

Я думаю, компилятор выберет k и m

1 голос
/ 16 марта 2011

Поскольку результат вычислений никогда не используется, компилятор может оптимизировать практически весь ваш код.Единственные вещи, которые должны остаться, эквивалентны

int main(void) {
  int i;
  do {
    printf("enter value");
    scanf(“%d”,&i);
  } while(i>0);
  return 0;
}

Как уже говорили другие, единственная оставшаяся переменная i не может быть register класса хранения, поскольку ее адрес взят.

...