我不知道我的问题是否合适。 如果有代码......
int a[2];
如果我想检查&a[0]%8==1
并执行操作a[0]= (a[0] & ~7)
,这是否有效?
答案 0 :(得分:3)
决定数组地址的不是你,而是编译器+链接器来决定编译+加载时间。 (并且您不能将数组分配给数组元素。)
如果您需要适当对齐的内存,请使用malloc()
中的<stdlib.h>
功能。 C语言标准保证malloc
返回的指针适合任何类型。如果任何类型的最低要求是8,那么这将是一个8字节对齐的指针。所以你应该做的是:
#include <stdlib.h>
int main (void)
{
int *a;
a = malloc (2 * sizeof(*a));
if (a == NULL) { /* Handle out of memory. */ }
/* ... */
}
这实际上有点过分,因为用int a[2];
声明的数组int很可能具有支持最快操作的对齐。为什么你认为强制8字节对齐会有利?