Будет ли memcpy правильно копировать массив, выделенный с помощью 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;
}

1 ответ

Решение

Ваш пример memcpy(b, a, 10 * sizeof(double)); будет работать правильно.

Выравнивание применяется к начальному адресу, а не к размеру зарезервированного блока памяти.

Другие вопросы по тегам