• 家庭作业(总)


    家庭作业汇总

    2.59

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

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

     

     

     

    6.42(未选,但作为6.436.44的原型和参考)

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

     

    8.9

     A开始5结束7       B开始2结束4
    C开始3结束6     D开始1结束8
    根据题目画出一下表格,最左边框为0,每一个格为一个时间片,就可以得到一下表格,所以在同一纵列中为并发的进程

    A

    A

    B

    B

    C

    C

    C

    D

    D

    D

    D

    D

    D

    D

    所以,AB不并发,AC,AD,BC,BD,CD是并发运行

    8.13
    代码关键部分

        int x=3;
        if(Fork() != 0)
            printf("x=%d ",++x);
        printf("x=%d ",--x);

    子进程Fork为0,所以直接打印x=2;
    父进程执行if内的语句,先打印x=4然后x=3就像下图这样

        →x=2
        →x=4→x=3 
    所以只要满足上面的拓扑排序即可

    8.16

    代码关键部分

    int counter=1;
    int main()
    {
        if(fork()==0){
            counter--;
            exit(0);
        }
        else{
            Wait(NULL);
            printf("counter=%d
    ",++counter);
        }
    exit(0);

    子进程fork为0,执行if语句,将它的寄存器里的counter设为0;然后父进程等子进程执行完后,再执行else语句,它的寄存器里的counter值未受子进程的影响,所以打印的是counter=2

    汇总

    2.59(两星),6.43(两星),6.44(两星),8.9(一星),8.13(一星),8.16(一星)

    均独立完成,共9分

     

     

  • 相关阅读:
    几何服务,cut功能,输入要素target(修改后)内容。
    几何服务,cut功能,输入要素target(修改前)内容。
    ArcGIS Server,rest路径输入要素json 格式描述
    window对象的screen详解
    window对象的inner/outer/page/screen详解
    js的scroll详解
    js的client详解
    自己封装的操作DOM方法
    js模拟高级语言的重载
    charCode与keyCode的区别
  • 原文地址:https://www.cnblogs.com/shadow135211/p/4986669.html
Copyright © 2020-2023  润新知