【发布时间】:2017-07-26 15:40:46
【问题描述】:
我正在分配一个带有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;
}
【问题讨论】:
-
或者数组元素之间也会有填充? - 想想,它怎么能做到呢?它返回一个指向
void的指针,它没有任何“元素”的概念。并且是对齐数组的start,最后不需要padding。 -
@EugeneSh。 .. 即使有,C 标准也明确定义了 数组元素之间不应出现填充。
-
@EugeneSh。谢谢,你能把它作为答案吗?
-
不……太懒了。
-
@EugeneSh。我会把你的comment 晒黑,但我想我是 T.L.也。 ;-)