用C语言实现缓存
我很困惑,不确定我所做的是否正确用C语言实现缓存,c,caching,struct,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* L1C
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;
}
大体上,我把它叫做缓存*L1=L1Cache();
那么我可以用L1这样的东西吗????
我还得到了分段错误“l1->tag->valid=0”;这里IDK为什么??请帮忙
if (L1[indexoffset].tag->valid = 0) {
L1[indexoffset].tag->tag = tag;
L1[indexoffset].tag->valid = 1;
}
如果我添加l1->tag=malloc(sizeof(Node))代码>在缓存*L1Cache()
紧接着l1->misses=0代码>-用户3100209
它应该会起作用。不要忘了在结尾或更改指针时释放它(l1->tag=othernode
)。-弗朗西斯你真的是说=0
而不是上次的=0
如果
?是的,我的意思是==0。。。另一个问题是,当我执行“l1->tag->valid=0”时,我遇到了分段错误;我不确定这是什么原因,因为l1->tag->valid
中的access未初始化?我可以做l1->tag=NULL
然后l1->tag->valid
No,正如@Uchia所指出的,如果您不在某处写入l1->tag=malloc(sizeof(Node))
,您就不能访问tag->valid
。一个好的做法是初始化l1->tag=NULL
然后运行一些代码,然后测试如果(l1->tag!=NULL){l1->tag->valid=1}
试试这个!