Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言实现缓存_C_Caching_Struct - Fatal编程技术网

用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}
试试这个!