在创建我的缓存模拟器时,我意识到我需要一个结构来保存通常从主内存复制到缓存的数据块。在这种情况下,它持有8个数字。我将我的缓存设置为一个对象,以便我可以设置它的标签,有效位,脏位,最后是数据块。所以我认为阵列是最好的事情。我的吸气者和制定者会是:
public int[] getDataBlock() {
return dataBlock;
}
public void setDataBlock(int[] dataBlock) {
this.dataBlock = dataBlock;
}
如果是,如何将缓存初始化为全0?
//initialize cache slots to 0
for (int i = 0; i<cache.length; i++) {
cache[i] = new SlotNode();
cache[i].setValidBit(0);
cache[i].setTag(0);
for (int j = 0; j < cache.length; j++) {
cache[i].setDataBlock([0]);
}
//cache[i].setData(0);
cache[i].setDirty(0);
}
答案 0 :(得分:1)
您可以编写一个帮助函数来清除缓存槽,如下所示:
public void clearData(){
Arrays.fill(this.dataBlock,0);
}
要从主要记忆复制到特定广告位,请使用System.arraycopy:
public void copyToCacheSlot(int[] mainMem, int baseIndex, int length){
if (length <= 8)
System.arraycopy(mainMem, baseIndex, this.dataBlock, 0, length);
else
//Copied too much
}
循环浏览cache
数组并根据每个元素调用上述函数。