zoukankan      html  css  js  c++  java
  • 第六章家庭作业

    第六章家庭作业

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

  • 相关阅读:
    leetcode_268.missing number
    leetcode_41. First Missing Positive_cyclic swapping
    cyclic swapping algorithm
    leetcode_919. Complete Binary Tree Inserter_完全二叉树插入
    前端的图片隐写术
    C#读取串口数据实现无线手柄操作ROV
    通过android传感器控制ROV云台转动
    C#实现的简易多人聊天室
    ARM Cortex M3指令集
    ODbgscript 1.82.x Document
  • 原文地址:https://www.cnblogs.com/shadow135211/p/4956432.html
Copyright © 2011-2022 走看看