首页 > 试题广场 >

题目来源于王道论坛 有如下C语言程序段:

[单选题]
如下C语言程序段:
for(k=0; k<1000; k++)
 a[k] = a[k]+32;

若数组a及变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小为1KB、块大小为16B,该程序段执行前Cache为空,则该程序段执行过程中访问数组aCache缺失率约为 ()



  • 1.25%
  • 2.5%
  • 12.5%
  • 25%
推荐

解析:

分析语句“a[k]=a[k]+32”:首先读取a[k]需要访问一次a[k],之后将结果赋值给a[k]需要访问一次,共访问两次。第一次访问a[k]未命中,并将该字所在的主存块调入Cache对应的块中,对于该主存块中的4个整数的两次访问中只在访问第一次的第一个元素时发生缺失,其他的7次访问中全部命中,故该程序段执行过程中访问数组aCache缺失率约为1/8(即12.5%)。

发表于 2018-06-16 11:11:50 回复(2)
首先看数组共1000个int数据,就是4000B,需要占用的主存块数是4000B/16B = 250块。Cache大小是1024B,一块是16B,因此共有64块。问题简化为250块主存块映射到64块Cache的过程。主存与Cache块的交换单位是块,也就是4个int数据。a[k] = a[k]+32 右边是读取数据,左边是写回数据。也就是对一个数据两次操作。且第一个数据读取时不命中,写Cache命中。块中剩下的三个数读写都命中,也就是一块中的4个数据的8次操作,只有一次不命中!
发表于 2022-01-10 21:30:08 回复(3)
没看懂
发表于 2020-12-24 13:15:39 回复(0)
块大小为16B int数据4B 一次访问失败后 调入4块进入cache中 所以是1/8 = 12.5%
发表于 2020-06-04 15:47:20 回复(0)
取数组元素以后,还要写回,等于一个元素访问两次,所以一个Cache块四个元素,一共访存八次,缺失第一次。缺失率12.5%。(408真题)
发表于 2022-03-18 08:43:09 回复(4)
这是什么知识😰
发表于 2023-02-14 01:27:52 回复(1)
注意! 这里是 数组的每一个元素是访问两次, 一共访问了 2000次
一块是16B, 放4个元素, 采用直接映射, 
访问第一个元素0号时, 调入一块, 即连续的4个元素, 以此缺页
4个元素一共访问了 8次, 缺页率是 1/8
全体就是 250/2000, 也是1/8, 12.5%
发表于 2022-03-07 11:21:20 回复(1)
for是为了告诉你这道题要进行i从0到999的a【i】加法运算,a为int类型数,所以他一共有4000B的容量,除以每一块的16B也就是250块,而cache有1000B也就是64块,这里的一块相当于能够存下四个a【i】组成的整体(a0,a1,a2,a3看作整体,a4,a5,a6,a7看作整体以此类推),刚开始cache为空,所以在cache中顺序进行访问a【0】是无法访问的,这就是一次缺失,然后有a【0】的块就会将整个块存入cache中,在这之后访问a【1】,a【2】等都是成功命中,其他块以此类推,注意啦:a【i】=a【i】+32会对a【i】进行读取,写入两次访问,所以一个块会进行八次访问,一次缺失形成250次周期(cache内存较小,满格后会进行覆盖),所以缺失率就是1/8,感谢指正
发表于 2025-10-10 20:47:06 回复(0)
访问一次 写会一次 
4个元素 访问8次
一次缺失
发表于 2022-03-15 15:28:40 回复(0)