【发布时间】:2015-06-06 10:31:36
【问题描述】:
我在 C 中提取了以下代码,
typedef struct Item{
int a;
int b;
int c;
double d;
double e;
double* f;
double* g;
} Item;
我有一个声明为这个结构项的数组,
Item* result[/*no.of threads*/];
当我初始化这个结构时,我希望它对齐到 32 个字节,所以我在 for 循环中做了以下操作,
for (int i = 0; i < threads; i++){
posix_memalign((void **)&result[i], 32, sizeof(Item));
}
但这给了我以下错误,
error: use of undeclared identifier 'i'
我不能做这个操作吗?如果是这样,是否有任何其他方法可以将数组对齐到特定大小?
编译器:x86 上的 clang 3.4
【问题讨论】:
-
数组紧凑,不能重新对齐单个数组元素。您只需要在分配数组时对齐第一个元素,并且可能用例如标记结构
__attribute__ ((aligned (32)))用于 gcc。 -
@keltar:数组是一个指针数组。 OP 为每个线程分配单独的结构。他希望这些结构在 32 字节上对齐,并使用
posix_memalign分配它们。 -
@chqrlie 是的,被无意义的错误消息打扰了,所以没有仔细查看代码。对不起。
标签: c arrays memory-alignment