在C中实现缓存

时间:2013-12-13 17:01:32

标签: c caching struct

我很困惑,不确定我所做的是否正确......

typedef struct Node {
   size_t tag;                
   struct Node *next;   
   int valid;
} Node;

typedef struct caches {
   struct Node *tag; 
   int hits;
   int misses;
   int Coldmisses;
} caches;

这些是我的结构.....

我创建了一个方法......

caches* L1Cache() {
    caches *l1 = malloc(numberofsets1*sizeof(caches));
    if (numberofsets1 != 1) {
        numberofsets1 = L1Size/(blocksize*L1assoc);
    }
    l1->hits = 0;
    l1->misses = 0;
    l1->tag->valid = 0;
    l1->Coldmisses = 0;
    return l1;
}

在我的主要部分,我称之为caches* L1 = L1Cache(); 然后我可以使用像这样的L1吗? 我也得到SEGEMENTATION FAULT“l1-> tag-> valid = 0;” IDK为什么?请帮忙

if (L1[indexoffset].tag->valid = 0) {
    L1[indexoffset].tag->tag = tag;
    L1[indexoffset].tag->valid = 1;
}

1 个答案:

答案 0 :(得分:0)

  

如果我在l1->tag=malloc(sizeof(Node));中添加caches* L1Cache()该怎么办?   在l1->misses = 0; - user3100209

之后

它应该工作。不要忘记在最后释放它或者更改指针(l1->tag=othernode)。 - 弗朗西斯