csapp2e 家庭作业 6.46

void transpose(int *dst,int *src,int dim)
{
 int i,j;
 int im,jm;
 for(i=0;i<dim-3;i+=4)
 {
  im = i*dim;
  for(j=0;j<dim-3;j+=4)
  {
   jm = j*dim;

   dst[jm+i]=src[im+j];
   dst[jm+i+1]=src[im+dim+j];
   dst[jm+i+2]=src[im+2*dim+j];
   dst[jm+i+3]=src[im+3*dim+j];
   dst[jm+dim+i]=src[im+j+1];
   dst[jm+dim+i+1]=src[im+dim+j+1];
   dst[jm+dim+i+2] =src[im+2*dim+j+1];
   dst[jm+dim+i+3]=src[im+3*dim+j+1];
   dst[jm+2*dim+i]=src[im+j+2];
   dst[jm+2*dim+i+1]=src[im+dim+j+2];
   dst[jm+2*dim+i+2]=src[im+2*dim+j+2];
   dst[jm+2*dim+i+3]=src[im+3*dim+j+2];
   dst[jm+3*dim+i]=src[im+dim+j+3];
   dst[jm+3*dim+i+1]=src[im+dim+j+3];
   dst[jm+3*dim+i+2]=src[im+2*dim+j+3];
   dst[jm+3*dim+i+3]=src[im+3*dim+j+3];
  }
 }
 for(;i<dim;i++)
  for(;j<dim;j++)
   dst[j*dim+i]=src[i*dim+j];
}

 

 

用10000*10000的数组测试(linux下需要取消stack的大小限制才运行这么大的数组)

书上的程序平均需要 9.301s

优化后评价需要 3.830秒

### CSAPP 第三版家庭作业资源与指导 对于希望深入学习计算机系统结构并完成《Computer Systems: A Programmer's Perspective》(CSAPP)第三版的家庭作业的学生来说,获取合适的资源和支持至关重要。 #### 官方网站支持材料 官方教材配套网站提供了丰富的教学资料,包括幻灯片、实验手册以及针对每章内容设计的具体练习题解答提示。这些资源能够帮助学生更好地理解书中概念,并通过实践巩固所学知识[^2]。 #### 在线社区交流平台 加入专门讨论CSAPP课程的学习小组或论坛也是一个不错的选择。例如,在GitHub上可以找到许多由其他读者创建的相关项目仓库;Reddit中的r/compsci板块也经常有关于该书话题的帖子。这类平台上活跃着大量具有相同兴趣爱好的同学和技术爱好者,大家可以在这里分享见解、解决问题共同进步[^1]。 #### 编程挑战网站 LeetCode、HackerRank等在线编程竞赛平台上有不少题目可以直接对应到CSAPP各章节的知识点之上。利用好此类服务不仅可以提高编码能力,还能加深对底层硬件机制的理解程度。特别是那些涉及位运算操作或是内存管理方面的考题特别有助于复习准备CSAPP课后的习作部分[^3]。 ```c // 示例:实现mul3div4函数来计算3 * x / 4的结果 int mul3div4(int x) { // 计算3*x可能会溢出的情况 x = x + (x << 1); int k = 2; int add = x >> (sizeof(x)*8 - 1); // 获取最高有效位作为符号扩展依据 // 构造掩码用于处理负数情况下的正确移位 int mask = add << k; add &= ~mask; return (x + add) >> k; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值