Я узнал, что в стеке есть несколько распространенных случаев локального хранения
case 1 : недостаточно регистров для хранения всех локальных данных
case 2 : оператор адреса '&' применяется к локальной переменной, и, следовательно, мы должны иметь возможность сгенерировать адрес для нее
case 3 :Некоторые из локальных переменных являются массивами структур и, следовательно, должны быть доступны по ссылке на массив или структуру.
В практической задаче есть некоторые коды
long call_proc()
{
long x1=1; int x2= 2;
short x3=3; char x4=4;
proc(x1,&x1,x2,&x2,x3,&x3,x4,&x4);
return (x1+x2)*(x3-x4);
}
<generated assembly code>
call_proc:
subq $32, %rsp
movq $1, 24(%rsp)
movl $2, 20(%rsp)
movw $3, 18(%rsp)
movb $4, 17(%rsp)
leaq 17(%rsp), %rax
movq %rax, 8(%rsp)
movl $4, (%rsp)
leaq 18(%rsp), %r9
movl $3, %r8d
leaq 20(%rsp), %rcx
movl $2, %edx
leaq 24(%rsp), %rsi
movl $1, %edi
call proc
.....
Q1.В этой практике, применяется ли case2, а не case1 в соответствии с такого рода делами?
Q2.Если это правильно case2, могу ли я получить несколько примеров о case1?
Q3.Предполагая, что этот код, я думаю, нет необходимости сохранять все локальные переменные в стеке, например, x1, x2, x3, x4.Разумно ли предположить?