C语言结构体中使用restrict指针为何未产生汇编差异?
结构体中数组指针的
restrict关键字为何未影响汇编代码? 我尝试理解在同一结构体中为数组指针添加restrict关键字的作用,于是对比了添加与移除该关键字后的汇编代码,结果发现二者完全没有差异。
我的代码文件test_res.c如下:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <limits.h> typedef struct { int index; int index2; double *restrict a; double *restrict b; double *restrict c; } matstruct; void finalVal (matstruct *m) { int i,j; for (j=0; j<m->index2; j++){ for (i= 0; i<m->index; i++){ m->b[i] = sqrt(m->a[i]) * sqrt(m->b[i]); m->c[i] = sqrt(m->a[i]) + sqrt(m->b[i]); m->c[i] += sqrt(m->a[i]) * sqrt(m->b[i]); } } } int main() { matstruct *m = malloc (sizeof(matstruct)); m->index = 100000; m->index2 = 10000; m->a = malloc (sizeof(double)*(m->index)); m->b = malloc (sizeof(double)*(m->index)); m->c = malloc (sizeof(double)*(m->index)); for (int i=0; i<m->index; i++){ m->a[i] = 10.0+i; m->b[i] = 20.0+i; m->c[i] = 30.0+i; } finalVal (m); free (m->a); free (m->b); free (m->c); free (m); return 0; }
生成汇编代码的步骤:
- 执行编译命令:
gcc -g -O3 -c test_res.c - 导出汇编代码:
objdump -S test_res.o > test_res.s
移除结构体中指针的restrict关键字后,重复上述步骤生成test_no_res.s,对比两个汇编文件后发现完全无差异。这是否意味着在结构体中使用restrict关键字没有效果?
内容的提问来源于stack exchange,提问作者user402940
相关产品推荐
相关产品推荐

