Проблема memcpy в MIPS (я думаю)

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

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

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

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

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

1
задан Benjamin 1 December 2013 в 01:46
поделиться

3 ответа

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

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

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

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

1
ответ дан 2 September 2019 в 21:59
поделиться

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

0
ответ дан 2 September 2019 в 21:59
поделиться

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

1
ответ дан 2 September 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: