【发布时间】:2019-11-14 02:50:57
【问题描述】:
我不确定为什么这不起作用。我对typedef的有点困惑
typedef struct cache_line {
int valid;
int tag;
int usage;
} cache_line_t;
typedef cache_line_t* cache_set_t;
typedef cache_set_t* cache_t;
void init() {
S = 2 << (s-1);
B = 2 << (b-1);
cache = malloc(sizeof(cache_set_t*) * S);
for(int i = 0; i < S; i++) {
cache[i] = malloc(sizeof(cache_line_t*) * E);
for(int j = 0; j < E; j++) {
cache[i][j]->valid = 0;
cache[i][j]->tag = 0;
cache[i][j]->usage = 0;
}
}
}
编译时->'s 出现错误
s、b、S、B 和 E 是整数。 cache 在上面定义为 cache_t。我正在尝试制作一组S 集合,它们是E 行的数组。
非常感谢任何帮助
【问题讨论】:
-
改掉使用typedef作为指针的习惯,它只会让事情变得更加混乱。
-
cache的声明在哪里? -
只是
cache_t cache; -
请参阅Is it a good idea to typedef pointers? — TL;DR 一般不会,但指向函数的指针除外。请注意,全局变量
s、b、S、B和E可能不应该是全局变量;它们可以与指向(指向)缓存行数据的指针一起存储在一个结构中。您可以将s和b值传递给init()函数(应命名为cache_init())。全局变量cache可能是个坏主意;为什么不从init()返回值。然后你可以拥有不同大小的不同缓存等。