我有一些软件可以在带有 icc 的 redhat 系统上运行,并且运行良好。当我将代码移植到使用 MIPS 运行的 IRIX 系统时,我得到了一些计算结果,结果显示为“nan”,但那里肯定有值。
我在非 redhat 系统上没有任何好的调试器,但我发现我的一些数组偶尔会在其中出现“nan”,这导致我的点积计算返回为“nan” ”
鉴于我无法使用调试器跟踪它,我认为问题可能出在 memcpy 上。动态分配数组的 MIPS 编译器 memcpy() 函数是否存在任何问题?我基本上是用
memcpy(to, from, n*sizeof(double));
我无法真正证明这一点,但我认为这可能是问题所在。有什么解决方法吗?也许 sme 数据未对齐?我该如何解决?
最佳答案
如果您的问题来自 memcpy
中的错误,我会感到很惊讶。这可能是对齐问题:您的 double
是否充分对齐? (如果您仅将它们存储在 double
或 double[]
对象中或通过 double*
指针,它们将是,但如果您移动它们则可能不是通过 void*
指针)。 X86 平台比大多数平台更能容忍错位。
您是否尝试过在高警告级别使用 gcc 编译您的代码? (除了微 Controller 或大型机之外,Gcc 几乎可以在任何地方使用。它可能会生成较慢的代码,但比“本地”编译器具有更好的诊断能力。)
当然,它总是可能是代码中某些不相关部分的缓冲区溢出或其他内存管理问题,只是碰巧不会在您的原始平台上引起任何可见的错误。
如果您无法访问好的调试器,请至少尝试在关键位置打印东西。
关于c - MIPS memcpy 问题(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524922/