MIPS memcpy问题(我认为)

时间:2010-08-19 18:18:11

标签: c mips memcpy memory-alignment

我有一些软件,我在icc的redhat系统上工作,它工作正常。当我将代码移植到运行MIPS的IRIX系统时,我会得到一些计算结果,当那里肯定存在值时会出现“nan”。

我在非redhat系统上没有任何好的调试器,但是我已经发现我的一些阵列偶尔会出现“nan”,这导致我的点积计算回到“nan” 。“

看到我不能用调试器跟踪它,我认为问题可能在于memcpy。 MIPS编译器memcpy()函数与动态分配的数组有什么问题吗?我基本上是在使用

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

我无法证明这一点,但我认为这可能是个问题。有一些解决方法吗?也许涂料数据不对齐?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

如果您的问题来自memcpy中的错误,我会感到惊讶。这可能是对齐问题:您的double是否足够对齐? (如果您只将它们存储在doubledouble[]个对象中,或者通过double*指针存储它们,但如果您通过void*指针移动它们,则可能不存在。 X86平台比大多数平台更容忍错位。

您是否尝试在高警告级别使用gcc编译代码? (Gcc几乎可用于任何不是微控制器或大型机的地方。它可能产生比“本机”编译器更慢的代码但更好的诊断。)

当然,在代码的某些不相关部分中,它可能始终是缓冲区溢出或其他内存管理问题,而这些问题恰好不会在原始平台上造成任何可见的错误。

如果您无法访问一个好的调试器,请至少尝试在关键位置打印。

答案 1 :(得分:1)

内存区域tofrom是否可能重叠? memcpy不需要处理重叠的内存区域。如果这是您的问题,那么解决方案就像使用memmove一样简单。

答案 2 :(得分:0)

肯定支持sizeof()吗?