memcpy 是否会正确复制分配有 mkl_malloc 的数组?
Will memcpy correctly copy an array allocated with mkl_malloc?
我正在分配一个 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;
}
您的示例 memcpy(b, a, 10 * sizeof(double));
将正常工作。
对齐适用于起始地址,而不适用于保留内存块的大小。
我正在分配一个 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;
}
您的示例 memcpy(b, a, 10 * sizeof(double));
将正常工作。
对齐适用于起始地址,而不适用于保留内存块的大小。