Я пока не очень хорошо разбираюсь в C, поэтому у меня есть несколько вопросов.
У меня есть две из следующих структур:
typedef struct line_elems line;
typedef struct cache_handler *cache;
struct line_elems { // we don't care about valid/block bits in our simulator
int tag;
int freq; // for LRU principle
};
struct cache_handler {
int hit;
int miss;
int evict;
line **lines; // 2d array for sets
};
В инициализирован кеш:
cache make_cache(int s, int E) {
int i;
cache new = malloc(sizeof(struct cache_handler));
new->hit = 0;
new->miss = 0;
new->evict = 0;
line **new_line = malloc((1 << s) * sizeof(*new_line));
for(i = 0; i < (1 << s); i++)
new_line[i] = malloc(E * sizeof(struct line_elems));
new->lines = new_line;
return new;
}
Теперь я хочу создать систему для поиска по единственной строке в массиве 2d:
int search_lines(line *lines, int E, int tag, int frequency) {
int i;
for(i = 0; i < E; i++) {
//continue here
}
}
Я немного запутался в том, что именно я должен вводить вмоя функция search_lines.Если я введу: search_lines(cache->lines[0], E=5, tag=5, frequency=5)
Будет ли он делать то, что я ожидаю?То есть будет ли он искать через одну строку в моем 2d массиве?Я чувствую, что cache->lines[0]
- это не то же самое, что (line*)
.В чем разница между cache->lines
и cache->lines[0]
?Меня это смущает, потому что оператор ->
неявно выполняет один уровень разыменования?
Спасибо.