首页 > 试题广场 >

下面的C代码将定长数组的对角线上的元素设置为val:

[问答题]

下面的C代码将定长数组的对角线上的元素设置为val:

/* Set all diagonal elements to val */ 
void fix_set_diag(fix_matrix A, int val) { 
long i;
for (i = 0; i < N; i++)
A[i] [i] = val;
}

当以优化等级-01编译时,GCC产生如下汇编代码:

fix_set_diag:
   void fix_set_diag(fix_matrix A, int val)
    A in %rdi, val in °/0rsi
   movl $0, %eax
.L13:
  movl  %esi,(%rdi,%rax)
  addq  $68,%rax
  cmpq $1088,%rax
  jne  .L13
   rep;ret
创建一个C代码程序fix_set_diag_opt,它使用类似于这段汇编代码中所使用 的优化。使用含有参数N的表达式,而不是整数常量,使得如果重新定义了 N,你的代码仍能够正确地工作。

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