CSAPP perflab和cachelab遇到的一些阴间问题和解决

perflab:

1.没有sys/time.h、sys/cdef.h等。

原因:在64位虚拟机上,编译32位程序,就会出现此问题。

解决方法:需要安装两个库:sudo apt-get install g++-multilib,sudo apt-get install libc6-dev。

2.smooth的时候,尝试用中间变量减少重复计算,结果却在每一个点的计算结果上都出错了。偶尔会出现差值是2^14这种特异数值。

原因:你使用了pixel类型作为中间变量,而pixel类型的数据定义是short型。如果你存的是几个点的sum,那么很可能被截尾。

解决方法:用int临时变量保存。

3.自动计算means对于rotate函数会算得异常偏小,如果你感觉应该过了但是means显示没过,记得手算一下。

cachelab:

1.cache模拟部分测试时报错segmentation fault (core dumped)

原因:指针越界,我这里是s和S(1<<s)搞混了,导致访问cache的时候越界了。

解决方法:用gdb测试你的程序,出现越界的时候gdb会告诉你在哪里出错。

2.trans转置部分测试时非常卡

原因:很多地方都提到了是要移动到虚拟机独有的文件夹而不是共享文件夹,但是还有一个问题,可能是你的代码错了!如果你发现超时,第一时间检查你的可用剩余空间是否显著下降,如果是,说明是你的代码出错了,有无限循环等会导致程序无法结束的异常代码。

剩余空间下降的原因,我估计是valgrind在出现异常结束的时候,不会清除自己产生的文件,这会导致剩余空间被不知道哪来的文件全部占满,如果占满之后就再也打不开虚拟机了。

解决方法:将文件移动到虚拟机独有的文件夹中;检查代码错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值