首页 > 其他 > 详细

家庭作业(总)

时间:2015-11-22 21:53:33      阅读:377      评论:0      收藏:0      [点我收藏+]

第二章家庭作业

**2.59编写一个C表达式,生成一个字,由x的最低有效字节和y中剩下的字节组成。

只用一个C表达式实现,那么就用逻辑符号,(先都看成二进制)将x的最低有效位和1与,不变,其他位与0与,均为0。同样对y进行处理,之后将它们相加(逻辑符号或可实现)。

技术分享

技术分享

 

第六章家庭作业

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.44

将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%。

家庭作业(总)

原文:http://www.cnblogs.com/shadow135211/p/4986669.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!