多维数组索引是否调用函数来计算c中的元素地址? [英] Does multidimentional array indices calls a function to calculate the element adress in c?
本文介绍了多维数组索引是否调用函数来计算c中的元素地址?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我正在处理ARM Cortex M7。现在来看一下:
int a[4][4];
a[i][j]=5;
在汇编语言中,函数将计算a[j][j]地址,还是使用可查找(相同大小的指针数组)或某种神奇的方法将5
放置在正确的位置?
这是反汇编程序的输出:
136 array1[i][i+1]=i;
08000da6: ldr r3, [r7, #36] ; 0x24
08000da8: adds r3, #1
08000daa: ldr r2, [r7, #36] ; 0x24
08000dac: uxtb r1, r2
08000dae: ldr r2, [r7, #36] ; 0x24
08000db0: lsls r2, r2, #2
08000db2: add.w r0, r7, #40 ; 0x28
08000db6: add r2, r0
08000db8: add r3, r2
08000dba: subs r3, #36 ; 0x24
08000dbc: mov r2, r1
08000dbe: strb r2, [r3, #0]
推荐答案
如果您按照示例中的方式编写索引,编译器将在编译时计算所需的确切内存地址。
如果索引是变量,则将在运行时计算地址。
这里是comparison of assembly output for both cases。
这篇关于多维数组索引是否调用函数来计算c中的元素地址?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文