首页 > 试题广场 >

下面的代码转置一个MXM矩阵的元素,这里M是一个用#defi

[问答题]

下面的代码转置一个MXM矩阵的元素,这里M是一个用#define定义的常数:

1 void transpose(long A[M][M]) {
2   long i, j;    、
3   for (i = 0; i < M; i++)
4   for (j = 0; j < i; j++) {
5   long t = A[i] [j];
6   A[i][j] = A[j][i];
7   A[j] [i] = t;
8    }
9  }
当用优化等级-O1编译时,GCC为这个函数的内循环产生下面的代码:
.L6:
  movq (%rdx),%rcx
  movq (%rax),%rsi
  movq %rsi,(%rdx)
  movq %rcx,(%rax)
  addq $8,%rdx
  addq $120,%rax
  cmpq %rdi,%rax
  jne .L6

我们可以看到GCC把数组索引转换成了指针代码。

A. 哪个寄存器保存着指向数组元素A[i][j]的指针?

B. 哪个寄存器保存着指向数组元素A[j][i]的指针?

C.M的值是多少?


这道题你会答吗?花几分钟告诉大家答案吧!