多维数组索引是否调用函数来计算c中的元素地址?

人气:893 发布:2022-10-16 标签: arrays multidimensional-array c embedded stm32

问题描述

假设我正在处理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。

466