【问题标题】:Will memcpy correctly copy an array allocated with mkl_malloc?memcpy 会正确复制使用 mkl_malloc 分配的数组吗?
【发布时间】:2017-07-26 15:40:46
【问题描述】:

我正在分配一个带有mkl_malloc64 对齐的数组,我需要复制它。但我不明白对齐是如何工作的。 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.也。 ;-)

标签: c intel-mkl


【解决方案1】:

您的示例 memcpy(b, a, 10 * sizeof(double)); 将正常工作。

对齐适用于起始地址,而不适用于保留内存块的大小。

【讨论】:

    猜你喜欢
    • 2013-02-03
    • 2020-11-09
    • 2015-06-05
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2016-08-03
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多