Работает ли memcpy для больших массивов в структурах?

У меня есть структура, в которой есть динамический массив. Я определил две из этих структур.

Я заполняю массив первой структурой, затем использую строку типа

memcpy(R->v, A->v, A->n*sizeof(double)

где v — это динамически выделенный массив, а n — количество записей.

R и A одного типа, если это имеет значение.

Проблема в том, что значения не копируются в R. Есть идеи, почему? Когда я пытаюсь отладить это в totalview, memcpy переходит в функцию под названием «very_huge_loop», но никаких исключений или чего-либо не выдается.

длина массива составляет около 188 тыс. удвоений.

Спасибо


person Derek    schedule 28.06.2010    source источник
comment
memcpy должен нормально работать в описанной вами ситуации, хотя вы упустили некоторые детали, которые могут пролить больше света (типы массивов, они одинакового размера? Вы выделили достаточно памяти в обоих случаях для хранения n * 8 байтов? и т. д. ). Возможно, он работает нормально, и отладчик показывает вам неверные значения (например, если вы отлаживаете выпускную сборку, он не сможет правильно визуализировать значения). Также убедитесь, что A-›v содержит правильные значения перед копированием — возможно, что-то искажает его еще до того, как вы сделаете копию?   -  person Jason Williams    schedule 29.06.2010


Ответы (1)


Это может быть выравнивание памяти. Некоторым архитектурам не нравится, когда многобайтовые значения, такие как double, начинаются с любого произвольного байтового адреса. Когда вы выделяете память массива, вы можете использовать такую ​​функцию, как memalign() вместо malloc(). Если вы используете new double[n], то он уже должен быть правильно выровнен.

person Amardeep AC9MF    schedule 28.06.2010