Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C语言中的内置假定对齐_C - Fatal编程技术网

如何使用C语言中的内置假定对齐

如何使用C语言中的内置假定对齐,c,C,在我的C代码中 complex float M[n][n]; complex float *delta = malloc(n * sizeof *delta); complex float *v = malloc(n * sizeof *v); for (i = 0; i < n; i++) { v[i] -= 2.*delta[j]*M[j][i]; } 复数浮点M[n][n]; 复杂浮点*delta=malloc(n*sizeof*delta); 复数浮点*v=malloc(

在我的C代码中

complex float M[n][n];
complex float *delta = malloc(n * sizeof *delta);
complex float *v = malloc(n * sizeof *v);
for (i = 0; i < n; i++) {
    v[i] -= 2.*delta[j]*M[j][i];
}
复数浮点M[n][n];
复杂浮点*delta=malloc(n*sizeof*delta);
复数浮点*v=malloc(n*sizeof*v);
对于(i=0;i
其中
i
n
是整数

有人建议我使用
\u内置\u假定\u对齐
来确保这些对齐,以帮助自动矢量化。然而,看了这些文档后,我不知道该怎么做

您如何将其用于此代码



本问题中的代码摘自。这也是我想尝试对齐东西的原因。

\uuuuuu内置\uu aligned
只是提示
gcc
指针已经对齐,因此它通常可以矢量化以下代码;它既不是对
malloc
的指令,也不是对任何其他内存分配机制的指令,因此您可能对
gcc
撒谎

为了确保指针实际对齐,您有责任使用适当的机制。因此,你必须:

  • malloc
    然后向上取整到粒度的下一个倍数(如果还没有)
  • 或者在声明中使用(确保为堆分配的变量工作,也可能为堆栈分配的变量工作)
  • 或者使用对齐内存分配调用,如

我假设这是伪ish代码,在实际代码中,您在使用它们之前初始化
M
delta
v
?@Someprogrammerdude绝对是。问题来自于。