我有一个我正在声明的数组
int * myarray;
int num_of_element;
myarry = (int*) calloc(num_of_elements, sizeof(int));
int的大小是4个字节但是我想确保我的数组在8字节边界上开始 - 所以我每次都可以高效地加载两个值。我可以采用不同的方式或其他方式吗?
答案 0 :(得分:2)
有几种方法。
过度分配,并将返回的地址四舍五入到所需的路线。
定义一个具有对齐类型的联合,通常为double
。这需要低级知识,但是当您想要分配数组时,这不是最佳的。
答案 1 :(得分:1)
您是否尝试过posix_memalign
?
函数posix_memalign()分配
size
个字节,并将分配的内存地址放在*memptr
中。分配的内存的地址将是alignment
的倍数,必须是a 2的幂和sizeof(void *)
的倍数。
示例:
if (posix_memalign(&myarray, 8, num_of_elements*sizeof(int)) != 0) {
// failed
}
请参阅http://pubs.opengroup.org/onlinepubs/009696699/functions/posix_memalign.html
Linux posix_memalign联机帮助页还记录了aligned_alloc()(c11),memalign()(已废弃):
https://www.kernel.org/doc/man-pages/online/pages/man3/posix_memalign.3.html