- 论坛徽章:
- 0
|
arm? 又是啥os呢? executable必须是位置无关的?
OwnWaterloo 发表于 2011-10-21 01:00 ![]()
指的是ARM的芯片,os没关系,executable可以位置相关。
他的文中,“改进四”中的全局变量:
int array[10];
函数要拿到这个array中拿值, 通常需要
LDR R0, [PC, 相对PC的偏移]
LDR R1, [R0, array中的偏移]
编译程序需要在相对PC的偏移处,预先填一个值,这个值为array的地址。
(相对PC的偏移,这个编译时编译进指令里,不需要先抓“地址”的偏移放到寄存器,这点我前面多写了,抱歉)
---------------------------------------------
他的文中,“改进三”中的用局部变量:
int main()
{
float array[10];
...
find_max( array , 10 );
find_min( array , 10 );
find_ave( array , 10 );
...
}
array只是某个时刻的栈指针SP的值,
先 MOV R0, SP
调用约定,传递前几个参数,直接用R0,R1...,
于是这是后传参数,直接拿R0,零开销。
相对来说,“改进四”中,每次到find_**函数里,要多执行一句读内存,
LDR R0, [PC, 相对PC的偏移]
所以不用全局变量,还是划算一点。 |
|