Оптимизация регистра GCC - PullRequest
0 голосов
/ 09 апреля 2011

Привет! Мне было интересно, какой ассемблерный код сгенерирует gcc из этого кода (это просто фиктивный код для иллюстрации моей точки зрения):

int a = 0;
int foo(void)
{
    int result = a;
    a += 2;
    return result;
}

Я был удивлен, что gcc копирует переменную a в стека затем из стека в регистр, чтобы он мог его вернуть.Когда я добавил регистр в объявление результата, он оптимизировал код не для использования стека, а вместо этого, чтобы скопировать переменную непосредственно в регистр.Я знаю, что это не имеет никакого значения, но мне было интересно, есть ли веская причина, почему gcc не делает такую ​​оптимизацию неявно.Надеюсь, я ясно дал понять, о чем говорю ...

Есть идеи?

1 Ответ

7 голосов
/ 09 апреля 2011

При компиляции сборок Debug (т.е. с отключенными оптимизациями) компиляторы, как правило, создают очень простой и легко отлаживаемый код. В этом случае это может означать хранение всех переменных в памяти / стеке, а не в регистрах.

Попробуйте выполнить компиляцию с полной оптимизацией (-O3) и посмотрите, имеет ли это значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...