MIPS memcpy (я думаю) - PullRequest
       25

MIPS memcpy (я думаю)

1 голос
/ 19 августа 2010

У меня есть какое-то программное обеспечение, работающее на Redhat System с ICC, и оно работает нормально.Когда я перенес код в систему IRIX, работающую с MIPS, я получаю некоторые вычисления, которые выглядят как «nan», когда там обязательно должны быть значения.

У меня нет хороших отладчиков для неRedhat System, но я обнаружил, что некоторые из моих массивов время от времени получают в них "nan", и это приводит к тому, что мои вычисления точечного продукта возвращаются как "nan".

Видя, как я не могуотследить это с помощью отладчика, я думаю, что проблема может быть с memcpy.Есть ли проблемы с функцией memcpy () компилятора MIPS с динамически размещаемыми массивами?Я в основном использую

 memcpy(to, from, n*sizeof(double));

И я не могу доказать это, но я думаю, что это может быть проблемой.Есть ли обходной путь?Возможно, данные смеха смещены?Как мне это исправить?

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Я был бы удивлен, если бы ваша проблема возникла из-за ошибки в memcpy.Это может быть проблема с выравниванием: ваши double достаточно выровнены?(Они будут, если вы будете хранить их только в double или double[] объектах или с помощью double* указателей, но этого не произойдет, если вы перемещаете их с помощью void* указателей).Платформы X86 более терпимы к смещению, чем большинство.

Вы пытались скомпилировать свой код с помощью gcc с высоким уровнем предупреждения?(Gcc доступен практически везде, кроме микроконтроллеров или мэйнфреймов. Он может производить более медленный код, но лучше диагностировать, чем «родной» компилятор.)

Конечно, это всегда может быть переполнение буфера или другое управление памятьюпроблема в какой-то несвязанной части кода, которая, как оказалось, не вызвала видимой ошибки на вашей исходной платформе.

Если вы не можете получить доступ к хорошему отладчику, попробуйте хотя бы что-то напечатать в ключеместа.

1 голос
/ 19 августа 2010

Возможно ли перекрытие областей памяти to и from? memcpy не требуется для обработки перекрывающихся областей памяти. Если это ваша проблема, то решение так же просто, как использовать memmove .

0 голосов
/ 19 августа 2010

sizeof() определенно поддерживается?

...