私はまだC言語ではあまりよくないので、いくつか質問があります。 、私は2D配列内の単一の行を検索するシステムを作成したい今Cで2次元配列を持つ構造体
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;
}
:
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
};
ではでキャッシュを初期化:私は、次の構造体のうちの2つを持っている
:
int search_lines(line *lines, int E, int tag, int frequency) {
int i;
for(i = 0; i < E; i++) {
//continue here
}
}
私はちょっと私のsearch_lines functioに入力するはずですn。 私が入力した場合:search_lines(cache->lines[0], E=5, tag=5, frequency=5)
それは私が期待していることをするでしょうか?つまり、2次元配列の1行で検索しますか? cache->lines[0]
は(line*)
と同じではないと感じています。 cache->lines
とcache->lines[0]
の違いは何ですか? ->
オペレータは暗黙的に1レベルの逆参照を実行するので、これは私を混乱させるでしょうか?
ありがとうございます。
「新しい」キャッシュを呼び出さないでください。これはC++のキーワードであり、C++でコードをコンパイルしようとすると痛みの世界を導入するだけです。 – zmbq
newは、最初はひどい変数名です(あなたは常にわかりやすい名前を使うべきです)が、CでプログラミングするときにはC++に準拠するようにあなたのコードを変更するのはひどい推論です。私はあなたがそれまでのコードをコンパイルするのを気にしていれば、C++を使うと思います。 – Rabbit
これはわかりませんでした。すべてのコードでそれを変更しようとしています。ありがとう – de1337ed