cl.exe производит странный ассемблерный код - PullRequest
0 голосов
/ 19 декабря 2011

Я скомпилировал этот код C:

void foo() {
    int i = 0;
    i = 0;
    i = 0;
}

и я получил это:

push ebp
mov ebp,esp
push ecx
mov dword ptr ss:[ebp-4],0
mov dword ptr ss:[ebp-4],0
mov dword ptr ss:[ebp-4],0
mov esp,ebp
pop ebp
retn

Мой вопрос: почему там push ecx? и как получается, что нет sub esp,4 или что-то, чтобы освободить место в стеке? Параметры компилятора не используются.

1 Ответ

4 голосов
/ 19 декабря 2011

В любом случае в стеке будет доступно 4 байта, а push экономит пару байтов вместо sub. Может быть, автор компилятора решил оптимизировать этот случай, нажав регистр.

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