我正在分配一个mkl_malloc
与64
对齐的数组,我需要复制它。但我不明白对齐是如何工作的。 mkl_malloc
只是在末尾添加填充,以便数组的总大小是64字节的倍数吗?或者数组元素之间是否还有填充?
以下示例中的代码会将a
的所有内容复制到b
中,还是只复制到其中的一部分?
#include <stdio.h>
#include <mkl.h>
int main() {
double *a = mkl_malloc(10 * sizeof(double), 64);
// is this enough memory to include a?
double *b = malloc(10 * sizeof(double));
// will this copy all of a?
memcpy(b, a, 10 * sizeof(double));
mkl_free(a);
free(b);
return 0;
}
答案 0 :(得分:1)
您的示例memcpy(b, a, 10 * sizeof(double));
将正常运行。
对齐适用于起始地址,而不是预留内存块的大小。