下面的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,你的代码仍能够正确地工作。