Будет ли 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));
будет работать правильно.
Выравнивание применяется к начальному адресу, а не к размеру зарезервированного блока памяти.