我在读《计算机系统:程序员的视角》的第三章.在《堆栈上的本地存储》一节中,书中写道:
到目前为止,我们看到的大多数过程示例不需要任何本地存储,而只需要寄存器中可以保存的存储.然而,有时本地数据必须存储在内存中.这种情况的常见情况包括:地址运算符‘&;’应用于局部变量,因此我们必须能够为其生成地址.
我不明白为什么会这样.考虑一下书中的这个例子:
long caller()
{
long arg1 = 534;
long arg2 = 1057;
long sum = swap_add(&arg1, &arg2);
long diff = arg1 - arg2;
return sum * diff;
}
函数swap_add
需要两个指针参数,因此caller
需要在其堆栈上为局部变量arg1
和arg2
的地址分配空间.我知道你不能有一个指针来引用寄存器,但我不明白为什么会这样.
为什么我们不能将arg1
和arg2
存储在寄存器中,并使用&arg1
和&arg2
来引用它们?这样做的后果是什么?这本书主要关注x86-64,但我也很想了解其他架构.