В С++ локальные переменные всегда выделяются в стеке. Стек является частью разрешенной памяти, которую может занимать ваше приложение. Эта память хранится в вашей памяти (если ее не поместить на диск). Итак, компилятор С++ всегда создает код ассемблера, в котором хранятся локальные переменные в стеке?
Возьмем, к примеру, следующий простой код:
int foo( int n ) {
return ++n;
}
В коде ассемблера MIPS это может выглядеть так:
foo:
addi $v0, $a0, 1
jr $ra
Как вы можете видеть, мне не нужно было использовать стек вообще для n. Может ли компилятор С++ распознать это и напрямую использовать регистры процессора?
Изменить: Вау, большое спасибо за ваши почти неотложные и обширные ответы! Тело функции foo должно быть, конечно, return ++n;
, а не return n++;
.:)