第六章家庭作业
2015-11-11 16:50
169 查看
第六章家庭作业
6.43(两星),6.44(两星)
6.42(未选)
首先6.43(两星),6.44(两星)这两道题是根据6.42改变过来的,6.42中采用嵌套循环,将buffer中的所有数据清零pixel类型的结构体
struct pixel{ char r; char g; char b; char a; } ;
二维数组buffer定义为pixel类型,这个类型的结构体中含有四个数。首先cptr指向buffer[0][0].r(即第一项)时,后面的buffer[0][0].g,buffer[0][0].b,buffer[0][0].a均未被读入,所以第一次未命中,因为一行四个字节,所以读入buffer[0][0].r时把后面三项也读入了,这样再访问buffer[0][0].g等三项时均命中。所以不命中率为25%
6.43
将6.42中的嵌套循环改为以下代码//sizeof(char)==1; char *cptr = (char*)buffer; for(;cptr<(((char*)buffer)+640*480*4);cptr++) *cptr=0;
代码依旧是将数组清零,第一行把数组从pixel类型转为char类型,cptr首先指向buffer数组的起始位置,依次往后,初始为空,cptr指向buffer[0][0].r高速缓存不命中,然后高速缓存把4字节数据都调到自己的第一行,后三个就会命中,这样就同6.42中结果一样,不命中率为25%
6.42
将6.42中的代码修改如下//sizeof(int)==4; int *cptr = (int*)buffer; for(;cptr<(((int*)buffer)+640*480);cptr++) *cptr=0;
因为int本身就是4字节的,而第一行将buffer从pixel型强制转换为int型,所以cptr每指向数组一次,就一次指向了原结构体中的四项。首次cptr指向buffer[0][0]高速缓存不命中,高速缓存把4字节的数据调入,第二次cptr指向buffer[0][1],高速缓存再次不命中,所以此时的高速缓存不命中率为100%。
相关文章推荐
- date详解
- 夺命雷公狗---Redis---1-Redis介绍
- misc笔记(更新中...)
- 通过RS232发送和接收短信(二)
- 第六章 注解式控制器详解(1)——跟着开涛学SpringMVC
- 常用SQL
- React-Native学习指南
- GUI(2) 迷宫问题
- 写的第一个接口的总结
- json的好处及用法
- linux 操作日记
- C# 文字转换最简单的方法
- ubuntu 操作日记
- 从零开始学习Node.js例子七 发送HTTP客户端请求并显示响应结果
- 用jQuery.form实现批量输入控件的提交
- 利用标定板做视频流的视觉定位
- 小记
- 寻找无向连通图的割点
- touch详解
- java日志组件介绍(common-logging,log4j,slf4j,logback )