多维数组索引是否调用函数来计算c中的元素地址? [英] Does multidimentional array indices calls a function to calculate the element adress in c?

查看:0
本文介绍了多维数组索引是否调用函数来计算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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆